Des événements pour automatiser sa boutique

Le cron désigne un programme informatique sur Linux permettant de lancer à intervalle régulier un script automatique. Il peut être écrit dans différents langages de programmation. Avec Apache ou Nginx, on peut lancer certaines tâches sur son site ou sa boutique. On peut appeler une hook WordPress pour lancer des actions à une date précise et qui prendraient du temps à faire manuellement. Sous Windows il est possible d’utiliser le planificateur de tâches pour lancer un .BAT ouvrant le terminal appellant un fichier.

WordPress intègre nativement un système cron qui est appelé avec le wp-cron.php du répertoire racine. Les hébergeurs permettent de le lancer en paramétrant un délai d’exécution au niveau du crontab. Quand ce fichier est appelé toutes les fonctions du functions.php ou des plugins et qui se sont abonnées sont lancées. Beaucoup d’extensions lancent des tâches automatiques sur Woocommerce ce qui peut ralentir un site si elles sont appelées dans un intervalle de temps trop régulier.

Comment lancer une tâche à intervalle régulier en code
Comment lancer une tâche à intervalle régulier en code

Activer le cron au niveau du serveur

Si on a la possibilité de mettre en place un cron au niveau du serveur de son hébergement, alors il faut le désactiver dans le système de WP avec la constante DISABLE_WP_CRON à inscrire dans le fichier de configuration. Cela va demander à WP de ne pas appeler le cron à chaque visite sur son site Internet pour optimiser les performances. Pour le désactiver il faut ajouter la ligne suivante dans le wp-config.php :

define('DISABLE_WP_CRON', true);

Ensuite 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 actions enregistrées dans la table crontab. Si wp-cron.php est déjà configuré, il devrait s’afficher dans une ligne indiquant un délai d’exécution. Si la table crontab est vide, il faut ajouter une tâche dans la table en la réglant toutes les demi-heures par exemple :

*/30 * * * * wget -q -O - https://mywebsite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Sur OVH il faut se connecter au manager, aller dans les tâches planifiées de son hébergement et créer une planification. On indique la commande à exécuter avec le lien vers le fichier wp-cron.php puis on renseigne l’intervalle de temps.

S’abonner au cron et exécuter une fonction

Pour bien paramétrer le cron que l’on souhaite mettre en place, je conseille d’installer le plugin WP Control permettant 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 appelant des fonctions personnalisées.

Les fréquences dépendent en partie du crontab renseigné au niveau de l’hébergement. Si le crontab est réglé toutes les 15 minutes, alors les exécutions ne pourront se faire en dessous de ce délai. Il est bien de régler un délai de 30 minutes et de lancer les fonctions gourmandes en ressources dans des créneaux horaires ou il y a peu de visiteurs.

Interface des actions exécutées de WP Control
Interface des actions exécutées
Interface des fréquences utilisées de WP Control
Interface des fréquences utilisées

Avec Wp Control on peut ajouter l’action my_custom_function qui s’exécutera toutes les nuits à 0h avec la fréquence daily. La fréquence daily est native à WP, il y a plusieurs fréquences natives et on peut en créer de nouvelles. Dans le functions.php on ajoute la fonction 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 call_my_custom_function sera appelée.

add_action( 'wp', 'check_cron_job' );
function check_cron_job() {
    if ( ! wp_next_scheduled( 'my_custom_function' ) ) {
        wp_schedule_event( time(), 'daily', 'my_custom_function' );
    }
}
add_action( 'my_custom_function', 'call_my_custom_function' );
function call_my_custom_function() {
    // function ...
}

Pour éviter de vérifier le hook à chaque appel du functions.php on peut ajouter une simple condition afin d’optimiser un peu tout cela. La fonction wp_doing_cron vérifie si l’exécution du code en cours se fait avec le cron de WordPress. Cela évite de devoir enregistrer une hook lors de la navigation dans le front-office ou le back-office.

if ( wp_doing_cron() ) {
    add_action( 'wp', 'check_cron_job' );
    function check_cron_job() {
        if ( ! wp_next_scheduled( 'my_custom_function' ) ) {
            wp_schedule_event( time(), 'daily', 'my_custom_function' );
        }
    }
    add_action( 'my_custom_function', 'call_my_custom_function' );
    function call_my_custom_function() {
        // function ...
    }
}

Exemples de fonctions à utiliser avec WooCommerce

Il y a énormément de possibilités à utiliser le cron avec WooCommerce. Certains plugins s’abonnent automatiquement pour lancer des actions récurrentes. Tout d’abord en ce qui concerne la sécurité, on peut faire des sauvegardes automatiques de la base de données avec les dernières commandes. Envoyer un message à un groupe de clients selon des conditions, demander un avis clients une fois que la commande est classée en terminée après un délai ou faire la relance de paniers abandonnés.

Il est possible d’envoyer un message concernant les commandes non payées ou un autre de bienvenue aux nouveaux inscrits sur notre site ou encore passer un produit en hors stock à une date précise. Enfin on peut par exemple activer une réduction tous les lundis sur un produit particulier au lieu d’utiliser le système de WooCommerce qui ne propose qu’un seul intervalle de promotion.

Il existe une multitude d’idées à exploiter pour améliorer le fonctionnement de sa boutique WooCommerce. Il faut réfléchir d’une part à comment les actions automatiques peuvent améliorer l’expérience utilisateur et mieux le fidéliser puis d’autre part à comment aider les administrateurs dans leurs tâches quotidiennes. Il est possible de désactiver un compte utilisateur qui n’a pas réglé son abonnement par exemple. Il est important de se questionner sur comment une action peut améliorer le processus interne en aidant un préparateur de commande dans la gestion des produits ou un assistant commercial avec les utilisateurs.

Le cron peut être utile en local pour lancer des analyses de la base de données de sa boutique après export, pour vérifier que les prix ou le stock des produits correspondent bien à ceux que l’on a en interne avec son logiciel. Le code exécuté dans une tâche peut aider à la vérification des données afin d’améliorer le travail des employés et des responsables.

Un avantage concurrentiel pour sa boutique en ligne

Cette fonctionnalité permet de réaliser toute une panoplie d’actions automatiques très utiles pour les administrateurs d’un site web facilitant le travail des gestionnaires et les processus interne d’une entreprise. Avec un développeur web qui connait bien l’environnement utilisé, une société peut mettre en place des actions automatiques qui auraient demandées beaucoup de temps manuellement. C’est un atout dans un écosystème concurrencé pour rester compétitif en améliorant l’expérience utilisateur et le travail des employés.

Ce système procure des avantages considérables pour automatiser certains aspects de sa boutique en ligne. Cependant il demande des ressources niveau serveur et de nombreuses extensions appellent des scripts événementiels. Il faut penser à le désactiver puis le régler au niveau serveur afin qu’il ne se lance que dans un intervalle d’une demi-heure.