Wordpress - Cron WORDPRESS

Wordpress

[11/12/2017] Cron WORDPRESS

Tâches planifiées et WP-CRONTROL

INFORMATUX Développements PHP JQUERY Mobile Cross-platform Sécurité Web Cron WORDPRESS

Qu’est ce qu’un cron ?

Un cron vous permet de planifier l’exécution d’un script à une date/heure précise, une récurrence précise, une exécution unique.

Wordpress possède un système de cron (tâches planifiées) puissant et très efficace à condition que vous ayez des visiteurs sur votre site. Et oui, les crons de WP ne s’exécutent que s’il y a de l’activité sur votre site (du passage en gros). Donc si vous avez besoin d’exécuter des scripts précis à des heures précises, vous devez opter pour un Cron sur votre serveur.

Mais ceci a des inconvénients : si votre cron s’exécute sur votre crontab serveur, vous ne bénéficierez pas des librairies de votre WP. En revanche, un cron WP pourra accéder à pratiquement toutes les librairies de votre cher WP. Choisis ton camp…

Wordpress possède des récurrences déjà embarquées avec les fréquences suivantes :
1. Une fois par heure (hourly)
2. Deux fois par jour (twicedaily - 12 heures) 
3. Une fois par jour (daily)
4. Mensuellement (monthly)

Donc vous pouvez ajouter un cron WP à exécuter toutes les heures par exemple de cette façon :

register_activation_hook(__FILE__, 'my_schedule_job');

function my_schedule_job() {
 if (! wp_next_scheduled ( 'prefix_my_event' )) {
 wp_schedule_event(time(), 'hourly', 'prefix_my_event');
 }
}
 
add_action('prefix_my_event', 'a_executer_chaque_heure');
 
function a_executer_chaque_heure() {
 // Votre code a executer
}

 

Imaginons que ces fréquences ne vous suffisent pas, vous pouvez créer facilement les vôtres de cette façon :

add_filter('cron_schedules','my_prefix_cron_schedules');

function my_prefix_cron_schedules($schedules){
    if(!isset($schedules["1min"])){
        $schedules["1min"] = array(
            'interval' => 1*60,
            'display' => __('Once every 1 minute'));
    }
    if(!isset($schedules["2min"])){
        $schedules["2min"] = array(
            'interval' => 2*60,
            'display' => __('Once every 2 minutes'));
    }
    if(!isset($schedules["5min"])){
        $schedules["5min"] = array(
            'interval' => 5*60,
            'display' => __('Once every 5 minutes'));
    }
    if(!isset($schedules["10min"])){
        $schedules["10min"] = array(
            'interval' => 10*60,
            'display' => __('Once every 10 minutes'));
    }
    if(!isset($schedules["30min"])){
        $schedules["30min"] = array(
            'interval' => 30*60,
            'display' => __('Once every 30 minutes'));
    }
    return $schedules;
}

 

Si nous voulons programmer notre script toutes les 5 minutes, il nous faut effectuer ceci :

register_activation_hook(__FILE__, 'my_schedule_job');

function my_schedule_job() {
 if (! wp_next_scheduled ( 'prefix_my_event' )) {
 wp_schedule_event(time(), '5min', 'prefix_my_event');
 }
}
 
add_action('prefix_my_event', 'a_executer_chaque_5_minutes');

function a_executer_chaque_5_minutes() {
 // Votre code a executer
}

 

Nous savons désormais ajouter un cron WP et ajouter nos propres fréquences. Mais si nous devions exécuter un script avec une heure précise, par exemple à 15h30 tous les jours, nous devrions le faire comme ceci :

register_activation_hook(__FILE__, 'my_schedule_job');

function my_schedule_job() {
	wp_schedule_event( strtotime('15:30:00'), 'daily', 'prefix_my_event' );
}

add_action( 'prefix_my_event', 'a_executer_tous_les_jours_a_15h30' );

function a_executer_tous_les_jours_a_15h30() {
 // Votre code a executer
}

 

Si nous avions un script à usage unique et donc nous ne voulons qu’il s’exécute qu’une seule fois une heure après avoir été activé, nous ferions donc comme ceci :

register_activation_hook(__FILE__, 'my_schedule_job');

function my_schedule_job() {
	// time() + 3600 = une heure apres maintenant
	wp_schedule_single_event( time() + 3600, 'my_new_event' );
}

add_action( 'prefix_my_event', 'a_executer_une_seule_fois' );

function a_executer_une_seule_fois() {
 // Votre code a executer
}

 

Un bon plugin pour voir tous les crons qui tournent sous votre wordpress et l’usage des fréquences associées est WP-CRONTROL. Une fois installé, vous le retrouverez dans les menus « Réglages » -> « Cron Schedules » et dans « Outils » -> « Cron Events ».

cron wordpress plugin wp-crontrol check schedule events

Maintenant que nous savons faire tout cela, vous me direz, j’ai suivi le code décrit au-dessus mais lorsque j’ai un cron avec une heure précise, j’ai un décalage d’une heure en plus ou en moins (voire plus). Mais pourquoi ça ? … Tout simplement car il vous faudra régler le fuseau horaire de votre Wordpress. Vous devrez aller dans vos « Réglages » puis dans « Général » et ensuite modifier votre fuseau horaire sur le bon GMT / UTC. C’est tout.

cron wordpress fuseau horaire gmt utc timezone

Bon code ;-)

Autres articles

© 2005 - 2018 • INFORMATUX