WPLake > Blog > 5 choses importantes sur WordPress Cron
  • English
  • Deutsch
  • Español
  • Italiano

5 choses importantes sur WordPress Cron

Temps de lecture: 10 minutes

-

Général Tutoriels

-

Mise à jour 14.07.23

WordPress Cron est un moyen simple de programmer des actions sans se soucier de la mise en œuvre. Nous passons en revue des moments spécifiques pour vous aider à gérer Cron correctement.

Table des Matières

Qu'est-ce que Cron ?

#lien copié

En bref, le Cron est un moyen d'exécuter certaines tâches (ou travaux si vous préférez) selon un calendrier. Par exemple, pour maintenir les taux de change à jour sur votre site web, vous devez les mettre à jour une fois par jour. Au lieu de le faire manuellement, vous créez une tâche cron et la réglez sur une fréquence d'une fois par jour. Cron est largement utilisé dans de nombreux plugins et thèmes WordPress pour maintenir les informations à jour.

System Cron VS WordPress Cron

#lien copié

Avec WordPress vous avez 2 façons différentes de le faire.

Système Cron

#lien copié

La première façon est de l'ajouter dans le cron du système Linux (c'est sur votre serveur d'hébergement). Ces tâches se trouvent dans le fichier /etc/crontab et cette approche est la plus universelle et la plus fiable pour exécuter les tâches Cron. Le système d'exploitation de votre serveur (par exemple Linux, Ubuntu ou RedHat) garantit que les tâches de nos fichiers PHP seront exécutées telles qu'elles ont été programmées, indépendamment de tout événement extérieur.

Bien qu'il soit plus universel et plus fiable, il n'a pas d'intégration avec WordPress. Cela signifie que si vous appelez directement des fichiers PHP dans votre thème, ils n'auront pas accès aux fonctions de WordPress et à la base de données. En effet, WordPress ne peut pas se charger correctement de cette manière. De plus, cela ne convient pas aux plugins, car si vous utilisez le plugin, vous ne pouvez pas simplement configurer le système Cron pour tous vos clients.

WordPress Cron

#lien copié

C'est ici qu'intervient WordPress Cron qui est la deuxième façon d'exécuter des tâches cron. Vous pouvez facilement enregistrer votre tâche cron dans WordPress, et WordPress s'occupera de charger et d'exécuter vos tâches selon le calendrier spécifié. Ça a l'air sympa, et c'est adapté aux plugins.

Qu'y a-t-il de mieux, n'est-ce pas ? Mais rien n'est parfait et cette approche présente également des inconvénients.

WordPress est une application basée sur PHP et n'a pas accès à votre système Cron (OS tournant sur votre hôte). En fait, cela signifie que WP a besoin d'un événement externe pour vérifier la liste des horaires et exécuter les tâches correspondantes. Par ailleurs, WordPress ne peut exécuter des tâches Cron que lorsque quelqu'un visite ou ouvre une page du site web. Si personne ne visite votre site web, les tâches Cron ne s'exécuteront pas.

Cela peut sembler effrayant, mais la bonne nouvelle est que WordPress garantit que les tâches seront appelées, mais il n'y a pas de garantie quant au moment exact où elles seront appelées. Par exemple, vous avez configuré une tâche Cron pour les taux de change pour qu'elle s'exécute une fois par jour. Dans la réalité, cela signifie que la tâche sera exécutée avec le premier visiteur, au bout d'un jour, à l'heure fixée. Pas plus tôt, mais peut-être plus tard, voire beaucoup plus tard si vous n'avez pas eu de visiteurs pendant plusieurs jours.

Certaines tâches peuvent être exécutées avec cette approche, mais tant que personne ne visite votre site, Cron ne s'exécute pas et ne "fonctionne" donc pas. Mais il y a d'autres tâches qui requièrent de la fiabilité. Ainsi, si vos tâches Cron consistent à extraire des informations de sources externes, ou simplement des tâches très importantes qui doivent être exécutées, comme les tâches liées à l'API, vous ne pouvez pas vous fier à cette approche.

Verdict

#lien copié

Les deux méthodes ont leurs avantages et leurs inconvénients.

Pour cette raison, la meilleure solution utilisée par les professionnels, et recommandée par WordPress, est une combinaison des deux approches, vous donnant le meilleur des deux et les faisant contrecarrer leurs inconvénients respectifs.

En tant que propriétaire de site web (ou développeur), vous devez configurer le système Cron qui appellera WordPress Cron. Dans l'ensemble, c'est relativement simple à faire, et de cette manière WordPress Cron sera plus fiable tout en conservant l'approche native de WordPress.

Voir le point n°2 ci-dessous pour savoir comment procéder.

A propos duron WordPress

#lien copié

Ci-dessus, nous avons appris que WordPress est une application basée sur PHP, et que son Cron interne repose sur des événements externes, c'est-à-dire des requêtes d'utilisateurs. Outre ce fait, il existe une liste d'aspects importants que nous allons examiner plus en détail.

1. WordPress Cron est asynchrone

#lien copié

Tout d'abord, vous devez savoir que WordPress Cron est asynchrone. Asynchrone signifie qu'il exécute les tâches Cron dans une requête séparée de l'événement lui-même.

Ainsi, une requête d'un utilisateur ne sera pas retardée par le Cron de WordPress, un utilisateur qui a déclenché un travail Cron n'attendra pas que le travail soit terminé pour voir le résultat de sa requête. Vous pouvez donc dormir sur vos deux oreilles en sachant qu'il n'y a pas de retard pour vos visiteurs. WordPress s'occupe de tout en arrière-plan.

Si vous êtes intéressé par les détails les plus fins, cela se passe techniquement de la manière suivante ;

WordPress vérifie le calendrier Cron à chaque requête d'un utilisateur sur un site web, et s'il est nécessaire d'exécuter des tâches Cron, il crée une nouvelle requête vers le fichier cron du site web (/cron.php), en utilisant la bibliothèque cURL. L'utilisateur reçoit immédiatement la réponse à sa demande, tandis que Cron exécute les autres tâches cron dans une demande séparée, qui est indépendante.

2. WP Cron n'est pas fiable (prêt à l'emploi). Façon de corriger

#lien copié

Comme nous le savons déjà, le Cron de WordPress dépend d'événements externes. Comparé au système Cron, il a un gros inconvénient. Mais nous pouvons facilement y remédier en fusionnant le Cron système et le Cron WordPress.

La solution consiste donc à créer une tâche Cron dans le Cron système et à appeler le Cron WordPress à partir de là. De cette manière, nous obtenons un Cron fiable avec toutes les fonctionnalités de WordPress et le support des plugins cron. Cela peut sembler un peu compliqué, mais ce n'est pas vraiment le cas.

Pour le manuel officiel voir ici.

La tâche peut être divisée en deux étapes. La première étape consiste à créer un nouveau job Cron système. En fait, il existe deux types d'hébergement différents (mutualisé et dédié), et la façon de créer des tâches Cron dépend de votre type d'hébergement.

Comment ajouter une tâche Cron système pour un hébergement mutualisé

#lien copié

Lorsque vous utilisez un hébergement mutualisé, il existe de nombreux fournisseurs différents, et vous devez vérifier les fonctionnalités offertes par votre fournisseur en ce qui concerne les tâches Cron. En général, le panneau d'administration de l'hébergement possède un onglet ou un élément spécial concernant Cron, où vous pouvez gérer les tâches Cron. Le panneau d'administration le plus courant est cPanel, vous pouvez en savoir plus sur la façon d'ajouter une tâche Cron pour cPanel dans l'article officiel . Vous trouverez ci-dessous la vidéo officielle.

Comment ajouter un job Cron système pour l'hébergement VPS

#lien copié

Si vous êtes propriétaire d'un VPS (Virtual Private Server i.e. Dedicated), vous devez vous connecter à votre serveur avec SSH et exécuter la commande suivante pour ouvrir un fichier en mode édition.

crontab -e

Étape 1. Configurer une tâche Cron pour WordPress Cron

#lien copié

Il est maintenant temps de créer un job Cron système qui appellera WordPress Cron.

a) Approche classique (avec wget)

#lien copié

Ajoutez une nouvelle ligne dans votre fichier cron et copiez le contenu ci-dessous.

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

Note : La ligne ci-dessus ne convient pas au mode WordPress Multisite. Si vous utilisez le mode WP Multisite et que vous avez besoin d'un Cron fiable, lisez plus sur les solutions de contournement ici.

N'oubliez pas de remplacer YOUR_DOMAIN_HERE par votre domaine.

La première partie de la commande indique que nous voulons que notre commande soit exécutée une fois toutes les dix minutes, indépendamment du numéro de l'heure, du jour de la semaine et d'autres options. La partie centrale utilise l'outil wget pour demander le fichier Cron de WordPress, et la dernière partie indique que nous ne voulons pas sauvegarder la sortie du fichier Cron.

Vous pouvez en savoir plus sur les arguments ici.

b) Approche pro (avec WP-CLI)

#lien copié

Si vous avez un site web protégé par un mot de passe (par exemple Dev), la méthode ci-dessus ne fonctionnera pas, car wget ne pourra pas appeler le fichier wp-cron.php. La solution dans ce cas est d'utiliser l'outil WP-CLI sur votre serveur. Il suffit de l'installer comme décrit dans le manuel officiel, et d'ajouter la ligne suivante à votre programme cron, qui appellera Cron via l'outil CLI pour le site web spécifique :

// don't forget to replace the path below to yours
wp cron event run --due-now --path=/home/admin/domains/YOUR_DOMAIN_HERE/public_html >/dev/null 2>&1

Cette méthode appellera le Cron directement via le système de fichiers, sans aucune requête HTTP. Cela signifie que nous n'aurons aucun problème avec les sites web, y compris ceux qui sont protégés par un mot de passe.

Étape 2. Désactiver les contrôles par défaut de WordPress

#lien copié

Comme nous avons maintenant intégré WordPress Cron avec le système Cron, WordPress n'a plus besoin de vérifier la liste des horaires dans chaque requête d'utilisateur. Nous l'indiquons à WordPress en configurant une constante spéciale dans le fichier wp-config.php.

/* Add any custom values between this line and the "stop editing" line. */

define( 'DISABLE_WP_CRON', true );

/* That's all, stop editing! Happy publishing. */

Comme vous pouvez le voir, le fichier contient une section spéciale pour les valeurs personnalisées, vous devez donc ajouter cette constante après le premier commentaire, et avant le second.

Ne vous inquiétez pas de l'intitulé de la constante, "DISABLE_WP_CRON" ne signifie pas en fait désactiver complètement WordPress Cron. Elle désactive la vérification de la liste des programmes à chaque demande de l'utilisateur. WP Cron devrait toujours fonctionner correctement, car nous appelons le fichier wp-cron.php directement via le système Cron.

C'est tout ! Félicitations ! Votre installation WordPress dispose maintenant d'un Cron fiable avec toutes les fonctionnalités de WordPress. Cron exécutera les tâches selon le calendrier prévu, quel que soit le nombre de visiteurs sur le site web.

3. Comment ajouter et supprimer des tâches Cron

#lien copié

Un job WordPress Cron est juste un bout de code PHP qui est exécuté par un programme. De plus, il peut utiliser toutes les fonctionnalités de WordPress et a accès à la base de données. Ici vous pouvez trouver un article pour les développeurs de WordPress sur ce sujet.

Choisir un intervalle

#lien copié

Tout d'abord, nous devons choisir un intervalle dans lequel Cron va répéter notre travail. Les intervalles par défaut de WordPress sont toutes les heures, deux fois par jour, tous les jours, toutes les semaines. Bien que cela soit suffisant dans la plupart des cas, il se peut que vous ayez besoin d'un intervalle personnalisé. Nous pouvons le définir en ajoutant le code suivant.

add_filter('cron_schedules', function ($schedules) {
    return array_merge($schedules, [
        // here is the name of our custom interval. used when adding a new job
        'five_hours' => [
            // the number here represents seconds, so the formula is: 5 hours * 60 minutes * 60 seconds
            'interval' => 5 * 60 * 60,
            'display' => esc_html__('Every Five Hours'),
        ],
    ]);
});

Ajout d'un nouveau travail récurrent

#lien copié

Pour ajouter un nouveau job Cron, nous devons ajouter un nouveau shortcode et attacher un planning à ce shortcode. L'intervalle (le deuxième argument de la fonction wp_schedule_event()) doit être l'un des intervalles par défaut, ou un nom personnalisé que vous pouvez ajouter en utilisant l'extrait de code ci-dessus.

add_action('YOUR_NAME_HERE', function () {
    /* your job here
    you can use all the WordPress features and functions
    e.g. wp_insert_post() */
});

// we must check that the event wasn't scheduled as each call creates a new one
// otherwise, if we've skipped the check it'll create a new event for each user request
if (!wp_next_scheduled('YOUR_NAME_HERE')) {
     /* the first argument is the timestamp which controls when the job 
       will be run for the first time
       the next argument  reflects the chosen interval */
    wp_schedule_event(time(), 'hourly', 'YOUR_NAME_HERE');
    return;
}

Dans le code ci-dessus, nous avons créé un travail vide que Cron exécute une fois par heure.

Ajout d'un nouveau job unique

#lien copié

L'exemple ci-dessus ajoute un travail que Cron exécute de manière récurrente. Mais vous avez également la possibilité de planifier un travail unique. Pour cela, vous devez utiliser la fonction wp_schedule_single_event() au lieu de la fonction wp_schedule_event(). Elle peut accepter deux (2) types d'arguments : le timestamp avec la prochaine heure d'exécution et le hook qui contient le job. Créons donc un job que Cron n'exécutera qu'une seule fois, après 5 heures :

add_action('YOUR_NAME_HERE', function () {
    /* your job here
     you can use all the WordPress features and functions
     e.g. wp_insert_post() */
});

// it's necessary to check that the event wasn't scheduled as each call creates a new one
// if you've skipped the check it'll create a new event for each user request
if (!wp_next_scheduled('YOUR_NAME_HERE')) {
    // as before, the first argument is the timestamp which controls when the job will be run
    // it's presented in seconds, so the formula is: 5 hours * 60 minutes * 60 seconds
    wp_schedule_single_event(time() + 5 * 60 * 60, 'YOUR_NAME_HERE');
    return;
}

Suppression d'un travail Cron

#lien copié

Vous pouvez supprimer une tâche planifiée que vous avez précédemment ajoutée. C'est particulièrement utile pour les tâches récurrentes. Pour cela, nous appellerons la fonction wp_unschedule_event() avec quelques arguments. Le premier doit contenir le prochain timestamp de l'événement (nous l'obtenons dynamiquement) et le second est le nom de votre travail.

Le code ci-dessous supprime les travaux uniques et récurrents. Attention, pour les travaux récurrents, il ne supprimera pas seulement le planning ou le prochain événement, mais aussi tous les événements futurs du travail.

$timestamp = wp_next_scheduled('YOUR_NAME_HERE');
if ($timestamp) {
    wp_unschedule_event($timestamp, 'YOUR_NAME_HERE');
}

4. comment surveiller les travaux Cron

#lien copié

Les informations sur toutes les tâches Cron de WordPress sont stockées dans la base de données. Cela signifie que nous pouvons obtenir une liste de toutes les tâches programmées et les gérer. C'est une chose importante pour les développeurs et les propriétaires de sites web.

Si vous avez vu le schéma de la base de données de WordPress, vous savez qu'il n'y a pas de table séparée pour Cron. Toutes les tâches Cron sont stockées dans une seule option de la table Options. Il est fort probable que vous connaissiez déjà cette table, car tout bon développeur WordPress connaît les principales tables de la base de données WordPress. Cette connaissance est nécessaire pour bien comprendre les processus internes. Si vous souhaitez vérifier et améliorer vos connaissances, lisez ce qu'un bon développeur WordPress doit savoir.

WordPress stocke les tâches Cron en tant qu'option dans la table des options

Mais regarder les données sérialisées directement via PhpMyAdmin n'est pas la meilleure idée. C'est pourquoi nous allons utiliser le plugin WP Crontrol qui nous donnera une interface claire. En utilisant l'outil, nous pouvons déboguer nos tâches Cron ou vérifier les tâches externes qui sont ajoutées par les plugins. Par exemple, nous avons créé notre tâche Cron personnalisée et l'avons exécutée immédiatement en utilisant l'outil pour nous assurer qu'elle fonctionne correctement.

Le plugin fournit l'interface de gestion des tâches Cron et des intervalles. Son utilisation est très simple. Installez et activez le plugin puis rendez-vous dans la rubrique "Outils" - "Événements Cron" de votre menu administrateur.

Ici, vous pouvez gérer les tâches Cron (appelées événements Cron) et les intervalles Cron (appelés plannings Cron).

Vous pouvez contrôler chaque tâche individuellement. Passez votre curseur sur l'élément cible pour voir la liste des actions

5. Plugins Cron et Cache

#lien copié

La chose importante à laquelle vous devez prêter attention est la collaboration des plugins WordPress Cron et cache. La plupart des sites WordPress utilisent un plugin de cache pour réduire le temps de réponse. Dans l'ensemble, l'approche est bonne et importante pour le référencement. De plus, le cache signifie beaucoup pour l'optimisation de la vitesse de WordPress. Mais dans notre cas, cela signifie aussi que nous sautons l'exécution de PHP et renvoyons du HTML.

Par défaut, WordPress Cron s'appuie sur les requêtes des utilisateurs. Le fait que WordPress Cron soit appelé ou non lors de requêtes vers des pages en cache dépend du plugin utilisé. D'après notre expérience, les plugins de cache n'appellent pas WordPress Cron ou l'appellent plus rarement que lorsqu'il est prêt à l'emploi.

WordPress Cron sera toujours appelé lors des visites de l'éditeur sur le tableau de bord, mais cela peut ne pas être suffisant. Cette approche est acceptable si vos tâches Cron ne sont pas importantes et peuvent être retardées pendant de longues périodes. Dans le cas contraire, consultez la deuxième partie de l'article.

La solution décrite dans la deuxième partie de l'article, concernant la fusion du système Cron et de WordPress Cron, montre les avantages évidents, donc si vous l'avez utilisé de cette façon, alors vous êtes prêt et vous n'avez plus besoin de vous en soucier.

Le fichier wp-cron.php est appelé directement et WordPress Cron fonctionne correctement.

Conclusion

#lien copié

Nous avons passé en revue les 5 choses importantes à propos de WordPress Cron. Nous vous recommandons de suivre la deuxième partie (fusionner Cron système et Cron WordPress) pour chacun de vos sites WordPress. Cela vous évitera des tonnes de maux de tête à l'avenir. N'oubliez pas non plus les outils qui vous permettent de surveiller vos tâches Cron. Ils sont très utiles.

Nous espérons que notre article vous a été utile, et que vous avez maintenant une idée claire de WordPress Cron et de la façon d'ajouter vos propres tâches Cron en utilisant les extraits de code.

A propos de l'auteur
Maxim Akimov

Certified WordPress expert from Ukraine with over 8 years of experience. Advocate of the BEM methodology and the overall modular approach. Loves sporting activities and enjoys going to the gym and regularly plays table tennis.

0 Commentaires

    Laisser un commentaire

    Répondre à 

    Veuillez faire preuve d'attention lorsque vous laissez un commentaire.

    Pas d'affichage public

    Got it