J'aimerais exécuter du code à chaque fois que mon wordpress cron s'exécute, quel que soit le laps de temps. Est-il possible de créer un add_action pour cela? J'ai regardé dans la liste de filtres mais je n'ai rien trouvé de pertinent.
Merci!
Fondamentalement, chaque chargement de page cherche à savoir s’il est programmé de s’exécuter, ainsi, le cron est vérifié et peut éventuellement s’exécuter à chaque chargement de page.
Je ne peux que présumer que vous voulez programmer quelque chose à courir de temps en temps. Si c'est le cas, vous devez regarder wp_schedule_event ()
Voici le code pour obtenir du code à exécuter chaque heure:
add_action('my_hourly_event', 'do_this_hourly');
// The action will trigger when someone visits your WordPress site
function my_activation() {
if ( !wp_next_scheduled( 'my_hourly_event' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'my_hourly_event');
}
}
add_action('wp', 'my_activation');
function do_this_hourly() {
// do something every hour
}
Si vous souhaitez utiliser votre propre code lorsque le programme de quelqu'un d'autre a été exécuté, vous devez vous associer à l'action déclenchée. Prenons donc le code ci-dessus est le plug-in de quelqu'un d'autre et vous voulez lancer votre code chaque fois que le leur est exécuté.
Eh bien, ils ont créé une action comme celle-ci:
add_action('my_hourly_event', 'do_this_hourly');
tout ce que vous avez à faire, c'est d'ajouter votre fonction à ceci:
add_action('my_hourly_event', 'my_flush_function');
function my_flush_function() {
// Do your code here
}
Après cette remarque du PO:
Pour être plus clair, j’ai planifié des publications à l’avenir et je souhaite que le cache soit effacé lorsqu’elles sont publiées via le déclencheur wp-cron. Il pourrait y avoir une meilleure façon?
Je ne sais passi le plug-in W3 Total Cache ne vide pas automatiquement le cache lorsque les publications sont publiées. Je croyais que oui. Si ce n'est pas le cas - dans ce cas, je m'accroche au point de post-transition ( voir la question connexe ), puis vide le cache. De cette façon, chaque fois qu'une publication change le statut (via wp-cron ou autre) - le cache est mis à jour pour refléter cela.
//Runs whenever a post changes status
add_action('transition_post_status','wpse49927_transition_post_status',10,3);
function wpse49927_transition_post_status($new_status,$old_status,$post){
//Flush cache
flush_pgcache();
}
En réponse à la question initiale:lancer une fonction à chaque lancement de wp-cron- je ne pense pas que ce soit possible par programmation - et la solution proposée par @Brady est probablement la plus proche qui soit '. Je vais faire ça.
Pour supprimer le cache de page uniquement lorsqu'un futur message planifié change réellement son statut de publication, le hook 'publish_future_post' est recommandé. Ajoutez l'extrait de code à votre functions.php.
N'utilisez pas non plus hook 'transition_post_status' qui est exécuté. Mon débogage a montré que parfois la classe "W3_PgCacheFlush" nécessaire du plugin W3TC ne peut pas être instanciée avec ce hook.
/**
* This function clears the complete W3TC cache when a future post is published.
* jot 11.09.12
*/
add_action('publish_future_post', 'wpse_49927_clear_w3tc_cache_on_future_to_publish');
function wpse_49927_clear_w3tc_cache_on_future_to_publish( $post_id) {
if (function_exists('w3_instance') && class_exists('W3_PgCacheFlush')) {
$w3_pgcache = & w3_instance('W3_PgCacheFlush');
if (is_object($w3_pgcache) && method_exists($w3_pgcache, 'flush')) {
$w3_pgcache->flush();
}
}
}
J'ai récemment eu à faire la même chose avec le cache total w3, voici comment je l'ai implémenté (simplifié pour répondre à la question OP)
<?php
/**
* fac_all_crons allows you to attach a function to all wp-cron's registered in a WordPress site
* @author Russell Fair
* @uses wp_get_schedules to get a list of registered crons
*/
function fac_all_crons(){
$schedules = wp_get_schedules();
if ( !$schedules )
return;
foreach ( $schedules as $key ){
if ( ! wp_next_scheduled( 'fac_cache_clear' ) ) {
wp_schedule_event( time(), $key, 'fac_cache_clear' );
}
}
}
add_filter('init', 'fac_all_crons');
/**
* fac_cache_clear does the actual cache clearing
* @author Russell Fair
*/
function fac_cache_clear(){
//do your cache clearing here
}
Pour quelqu'un qui arrive ici, il y a un moyen d'exécuter du code chaque fois que l'URL cron est appelée et cela peut être fait simplement avec le code suivant:
add_action( 'init', 'my_function_on_each_cron_call' );
function my_function_on_each_cron_call() {
if ( isset( $_GET[ 'doing_wp_cron' ] ) && $_SERVER['REQUEST_URI'] == '/wp-cron.php?doing_wp_cron' ) {
// YOUR CODE GOES HERE
}
}
Where $ _SERVER ['REQUEST_URI'] peut probablement être omis mais n'est pas dangereux.