Un cron WordPress pour automatiser certaines tâches

Le cron désigne un programme informatique sur Linux qui permet de lancer à intervalle régulier un script automatique. Le script peut être écrit dans différents langages de programmation. Avec un serveur web comme Apache ou Nginx, il est tout à fait possible de lancer un script PHP exécutant certaines tâches automatiques sur son site Internet. Mais on peut aussi bien lancer un script en Python ou JavaScript en fonction des besoins du développeur et du serveur qui est mis en place.

Le système de cron pour exécuter des fonctions à intervalle régulier
Le système de cron pour exécuter des fonctions à intervalle régulier

WordPress intègre nativement un système de cron qui se lance avec le fichier wp-cron.php inclus dans le répertoire racine sur le serveur. La plupart des hébergeurs permettent de lancer ce fichier en paramétrant un délai d’exécution au niveau de la table crontab du serveur. En appelant le fichier wp-cron.php tous les scripts inclus dans le functions.php ou dans les plugins et qui se sont abonnés au système de cron de WordPress s’exécutent.

Quelques exemples de script à mettre en place avec WooCommerce

Il y a énormément de possibilité à utiliser le cron avec WooCommerce. Certains plugins s’abonnent automatiquement au cron de WordPress afin d’exécuter des tâches récurrentes. Tout d’abord en ce qui concerne la sécurité, il est possible de réaliser des sauvegardes automatiques de la bases de données avec les dernières commandes. Envoyer les avis clients une fois que la commande est classée en terminée après un délai d’une semaine ou faire les relances des paniers abandonnés.

Vérifier le délai d’exécution du cron et l’appel au wp-cron.php

Pour bien vérifier qui le cron est appelé dans WordPress et WooCommerce il faut se connecter au serveur en SSH et utiliser la commande suivante dans le terminal :

crontab -l

Cette commande permet de lister toutes les tâches cron enregistrées dans la table crontab. Si le cron est bien configuré il devrait s’afficher une ligne indiquant un délai d’exécution et le lien vers le wp-cron.php ou la commande CLI de WordPress pour exécuter le cron. Si la table crontab est vide, il faut se rapprocher de son hébergeur pour mettre en place le système sur le serveur.

S’abonner au cron et exécuter une fonction en PHP

Pour bien paramétrer le cron que l’on souhaite mettre en place, je conseille d’installer le plugin WP Control qui permet de lister toutes les tâches cron de WordPress au niveau des plugins ou du thème. Avec ce plugin on peut gérer les tâches et les fréquences d’exécution permettant d’appeler des fonctions personnalisées. Bien entendu les fréquences dépendent aussi du crontab renseigné sur le serveur. Si le crontab est réglé toutes les 15 minutes par exemple, alors les exécutions ne pourront se faire en dessous de ce délai. Il est bien de régler un cron serveur toutes les 20 à 30 minutes et de lancer les fonctions qui sont gourmandes en ressources dans des créneaux horaires ou il y a peu de visiteurs.

Gestion des tâches exécutés par le cron avec Wp Control
Gestion des tâches exécutés par le cron
Gestion des fréquences du cron avec Wp Control
Gestion des fréquences du cron

Avec Wp Control on peut ajouter la tâche backup_woocommerce_database qui s’exécutera les nuits à 0h avec la fréquence daily. La fréquence daily est native à WordPress, il y a plusieurs fréquences natives et on peut en créer de nouvelles selon ces besoins. Dans functions.php on ajoute l’action qui vérifie le prochain passage du cron sur l’action wp comme indiqué. Si au prochain passage du cron le délai de la tâche est passé alors fct_backup_woocommerce_database sera exécutée.

<?php
add_action( 'wp', 'check_cron_job' );
function check_cron_job() {
    if ( ! wp_next_scheduled( 'backup_woocommerce_database' ) ) {
        wp_schedule_event( time(), 'daily', 'backup_woocommerce_database' );
    }
}
add_action( 'backup_woocommerce_database', 'fct_backup_woocommerce_database' );
function fct_backup_woocommerce_database() {
    // backup database + send by email
}

Pour éviter de vérifier le hook à chaque appel du functions.php on peut ajouter une condition afin d’optimiser les ressources. La fonction wp_doing_cron permet de vérifier si l’exécution du script courant se fait avec le système cron de WordPress ou pas. Cela permet d’éviter de devoir enregistrer les hooks lors de la navigation dans le front-office ou le back-office.

<?php
if ( wp_doing_cron() ) {
    add_action( 'wp', 'check_cron_job' );
    function check_cron_job() {
        if ( ! wp_next_scheduled( 'backup_woocommerce_database' ) ) {
            wp_schedule_event( time(), 'daily', 'backup_woocommerce_database' );
        }
    }
    add_action( 'backup_woocommerce_database', 'fct_backup_woocommerce_database' );
    function fct_backup_woocommerce_database() {
        // backup database + send by email
    }
}

Les tâches cron permettent de réaliser toute une panoplie d’actions automatiques très utiles pour les administrateurs d’un site sous WooCommerce ou sur WordPress. Avec un développeur web qui connait bien l’environnement WooCommerce, une entreprise peut mettre en place des tâches automatiques qui demandent du temps en termes d’administration en interne ou même en externe. Gagner du temps est important dans un écosystème très concurrencé afin de rester compétitif.