Cet article expose l’utilisation de wp_schedule_event()
qui déclenche un hook
dans un intervalle de temps spécifié. L’acronyme cron
peut signifier Command Run On Notice. Cron
est très utilisé sur les systèmes Unix
et est la troncature de crontab, lui-même la troncature de chrono table table de planification, en grec ancien chronos (χρόνος) signifie le temps.
L’action se déclenchera lorsque quelqu’un visite le site même si l’heure prévue est dépassée. Le script qui utilise la fonction wp_schedule_event()
devra donc être exécuté au moins une fois.
On suppose être dans une classe Ocmiex_Admin
qui sera exécutée au moins une fois par jour pour déclencher l’action quotidienne.
On utilise le hook
init
pour appeler la fonction wp_schedule_event()
pour définir notre hook qui lancera notre action. On définit également l’intervalle daily
correspondant à une durée de un jour avec le hook cron_schedules
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php // Exit if accessed directly if ( ! defined( 'ABSPATH' ) ) exit; class Ocmiex_Admin { public function __construct() { // Cron Late add_filter( 'cron_schedules', [$this, 'cron_schedules'] ); add_action( 'cron_my_action_hook', [$this, 'cron_my_action'] ); add_action( 'init', [$this, 'cron_my_action_scheduled'] ); } /** * Daily Cron */ public function cron_schedules( $schedules ) { $shedules['daily'] = array( 'interval' => 24 * 3600, 'display' => __( 'Once daily' ), ); return $schedules; } /** * schedule Cron My Action */ public function cron_my_action_scheduled() { //Schedule an action if it's not already scheduled if ( ! wp_next_scheduled( 'cron_my_action_hook' ) ) { wp_schedule_event( time(), 'daily', 'cron_my_action_hook' ); } } /** * Cron My Action */ public function cron_my_action() { my_action_function(...); } } |
Dans le hook
init
, qui est déclenché lorsque wordPress est chargé et l’utilisateur authentifié, on vérifie que l’action est bien programmée avec le hook cron_my_action_hook
. Si celle-ci est manquante, on l’ajoute avec la fonction wp_schedule_event()
.
Le hook cron_schedules
permet de définir l’intervalle daily
dans le tableau schedules
de wordPress, en définissant une durée ici une fois par jour.
Le hook cron_my_action_hook
lance notre action, qui doit être exécutée une fois par jour.
Et hop, notre action sera exécutée une fois par jour. Ceci peut être très pratique pour nettoyer régulièrement quelques tables personnalisées de la base de données wordPress. Évidemment, notre classe doit être lancée par un utilisateur qui visiterait le site (ou éventuellement la partie administration), ceci étant défini au préalable.
Your stuff is awesome man. Easy to understand and effortlessly reusable.
my_action_function(...)
is of course to be defined with the job you want ro run.