Comment fonctionne WordPress Cron

Publié: 2021-12-03

Vous êtes-vous déjà demandé ce qu'est WP-Cron ? Si tel est le cas, cet article est parfait pour vous apprendre tout ce que vous devez savoir sur les tâches planifiées de WordPress.

Cron (Command Run On) est un utilitaire lancé dans les systèmes UNIX, puis évolué sur les distributions LINUX qui a été proposé comme planificateur de tâches basé sur le temps.

Une tâche cron est une tâche exécutée de manière répétitive ou ponctuelle. Au fil des ans, il a principalement été utilisé comme outil d'administration système pour exécuter automatiquement des tâches.

Cron WordPress

Lors de l'exécution d'un site Web WordPress, certaines tâches sont effectuées en arrière-plan qui doivent être exécutées périodiquement, comme la vérification des mises à jour des thèmes et des plugins, les publications planifiées, les transitoires à supprimer et bien d'autres. Ces tâches planifiées basées sur le temps sont gérées par le WP-Cron.

Dans votre installation WordPress, le fichier lié aux tâches cron est le fichier wp-cron.php , situé dans le dossier racine de votre installation.

Le fichier wp-cron.php contient le code des tâches automatisées liées aux mises à jour et aux publications.

Comment ça fonctionne

Le WP-Cron vérifie la liste des tâches à chaque chargement de page et s'exécute en conséquence.

Si au moment où la page est chargée, une tâche est due, elle est ajoutée dans une file d'attente. De cette façon, WordPress garantit que même les événements dus seront déclenchés et non ignorés et que toutes les tâches seront finalement exécutées lors du chargement de cette page.

Il est naturel que cela vous semble irrationnel, mais réfléchissez à l'alternative. Dans un environnement d'hébergement mutualisé, comme c'est le cas majoritairement, vous devriez avoir accès aux commandes du serveur afin de contrôler ces tâches comme bon vous semble, mais cela ne serait-il pas risqué pour le serveur ?

Alors, considérez ce que fait WordPress comme solution de contournement dans cette situation. Cependant, cela présente quelques inconvénients que nous examinerons dans un moment.

Le plugin WP-Crontrol

Un moyen simple et efficace d'afficher la liste des tâches cron sur votre site Web WordPress consiste à installer le plug-in WP-Crontrol.

Après l'avoir activé, vous pouvez afficher la page d'administration du plugin sous l'élément de menu Tools->Cron Events. Dans une installation vanille, vous verrez quelque chose comme ceci :

Si vous passez la souris sur chaque ligne, vous remarquerez qu'il existe des actions fournies pour vous permettre de modifier ou d'exécuter l'un des événements.

Dans l'écran d'édition de l'événement wp_update_themes par exemple, vous pouvez modifier ses paramètres

Sous l'élément de menu Paramètres -> Horaires Cron, vous pouvez afficher les horaires par défaut et, si vous le souhaitez, ajouter l'un des vôtres et lui donner un nom à afficher dans la liste.

Comment créer une tâche Cron

Pour ajouter une tâche cron manuellement, il vous suffit de modifier le fichier functions.php du thème. Pour illustrer un exemple simple, ouvrez-le avec votre éditeur préféré et ajoutez le morceau de code suivant :

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }

Où 'my_cronjob' est le nom de votre hook et 'my_cronjob_function' est le nom de votre fonction qui enverra simplement un email à l'adresse que vous avez définie en remplaçant EMAIL_ADDRESS par celle désirée.

Ensuite, nous devons programmer ce crochet pour qu'il soit exécuté à l'heure que nous voulons.

Comment exécuter le travail une fois

Pour effectuer l'action en tant que tâche WP-Cron unique, nous devons utiliser la fonction intégrée WordPress wp_schedule_single_event() qui est conçue pour déclencher un hook à un moment spécifié. Sa structure est comme ceci :

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )

Où $timestamp est l'horodatage Unix pour la prochaine exécution de l'événement et $hook est le crochet d'action à exécuter lorsque l'événement est exécuté.

Ces deux paramètres sont obligatoires. Parlons maintenant des paramètres optionnels.

Avec le paramètre $args, vous pouvez utiliser un tableau contenant des arguments, pour passer à la fonction de rappel du crochet. Chaque valeur du tableau est transmise au rappel en tant que paramètre individuel. Les clés du tableau sont ignorées.

Le paramètre $wp_error peut être utilisé pour renvoyer une WP_Error en cas d'échec. Sa valeur par défaut est false.

Le code correspondant dans notre fichier functions.php ressemblerait à ceci :

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );

À ce stade, vous devriez pouvoir voir votre tâche personnalisée dans la liste.

Comment exécuter le travail en tant qu'événement récurrent

Ce que WordPress fournit pour ce scénario est la fonction wp_schedule_event() qui est structurée comme ceci

wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)

Le paramètre $timestamp est l'horodatage Unix requis pour la prochaine exécution de l'événement, $recurrence est une chaîne également requise pour la fréquence à laquelle l'événement doit se reproduire ultérieurement et $hook est le hook d'action à exécuter lorsque l'événement est exécuté.

Les paramètres optionnels $args et $wp_error sont les mêmes qu'avant.

Le code qui exécute le travail avec une récurrence de, disons, 1 heure est le suivant :

 add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }

Nous avons utilisé la fonction wp_next_scheduled() dans une instruction 'if' comme vous le voyez ci-dessus, afin d'éviter les événements en double et de nous assurer que la tâche n'est pas déjà planifiée avant de continuer et de l'exécuter.

Nous avons également utilisé l'étiquette "horaire" du tableau programmé sous Paramètres -> Cron Schedules. Si nous voulions une occurrence différente, disons toutes les 45 minutes, nous devrions d'abord créer une planification Cron personnalisée nommée « 45_minutes », puis l'utiliser dans le code.

 add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }

À ce stade, vous devriez pouvoir voir votre tâche personnalisée dans la liste avec les modifications attendues :

Inconvénients de WP-Cron

La façon dont WordPress gère les tâches cron garantit que la tâche s'exécutera mais ne vous permet pas de spécifier quand car, comme nous l'avons dit, la vérification est effectuée lorsqu'un visiteur charge une page de votre site Web.

Si nous relayons le contrôle des tâches cron sur le temps de visite des utilisateurs, il est possible que nous ayons un impact négatif sur le site Web, quelle que soit sa taille ou sa popularité.

Hébergez votre site web avec Pressidium

GARANTIE DE REMBOURSEMENT DE 60 JOURS

VOIR NOS FORFAITS

Dans le cas d'un site Web populaire, vous rencontrerez une grande quantité de trafic en raison de l'exécution simultanée d'un grand nombre de tâches. Cela peut consommer les ressources de votre serveur et avoir un impact sur les performances ou même entraîner une interruption de votre site Web.

Dans le cas d'un petit site Web, ce qui signifie peu de visiteurs, le wp-cron ne sera pas déclenché aussi souvent, donc certaines tâches cron importantes peuvent être reportées pendant suffisamment de temps pour créer des effets secondaires, comme ne pas prendre suffisamment de sauvegardes ou retarder la mise à jour de certains données comptées sur une tâche cron.

Désactiver WP-Cron

Si la façon dont WP-Cron gère les tâches cron ne répond pas à vos exigences et que vous avez besoin que les tâches soient exécutées à temps, vous devez désactiver WP-Cron et utiliser un service cron côté serveur.

Si la désactivation de WP-Cron n'est pas une option déjà fournie par votre hébergeur, voici comment vous pouvez le faire vous-même.

Ouvrez le fichier wp-config.php , situé sous le dossier racine de votre installation, avec votre éditeur préféré et recherchez les lignes liées au préfixe de la table de la base de données. Juste après, insérez cette ligne :

 // /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');

Ceci est obligatoire si vous souhaitez utiliser un planificateur plus stable, comme le service Linux cron afin de déclencher wp-cron.php quand cela vous convient le mieux.

Une solution côté serveur : le service Linux Cron

Chez Pressidium, nous utilisons le Linux Crontab pour déclencher WP-Cron toutes les 5 minutes. C'est le bon laps de temps qui garantit que vos tâches planifiées sont exécutées à temps et en même temps évitent de surcharger votre site Web WordPress. Cela n'interfère pas avec le planificateur WP-Cron, mais uniquement avec le mécanisme de déclenchement.

Conclusion

J'espère que cet article vous a aidé à vous familiariser avec WordPress Cron, ce qu'il est et comment il fonctionne, et comment créer vos propres horaires et tâches. Réfléchissez à deux fois si WP-Cron suffit à vos besoins, avant de choisir d'autres solutions côté serveur.