WPLake > Carrefour d'apprentissage > Cron WordPress
  • English
  • Deutsch
  • Español
  • Italiano

Cron WordPress

Découvrez le fonctionnement de WP Cron, ses différences avec System Cron, les avantages de la double approche pour la fiabilité, les outils de surveillance et les interactions avec les plugins de cache.

Les points clés en un coup d'œil

  1. WordPress Cron vs System Cron : WordPress propose deux méthodes pour exécuter des tâches planifiées : System Cron, qui opère sur le serveur d'hébergement, et WordPress Cron, qui s'appuie sur les visites des utilisateurs sur le site.
  2. Fiabilité de WordPress Cron : A l'origine, WordPress Cron n'est pas entièrement fiable car il dépend des demandes des utilisateurs. Cependant, en l'intégrant à System Cron, sa fiabilité peut être grandement améliorée.
  3. Intégration de WordPress et de System Cron : la combinaison de WordPress Cron et de System Cron garantit l'exécution fiable et cohérente des tâches programmées, offrant ainsi le meilleur des deux approches.
  4. Configuration des tâches Cron : WordPress permet aux développeurs d'ajouter et de gérer des tâches Cron, en spécifiant les intervalles et les tâches à exécuter, qu'il s'agisse d'événements récurrents ou uniques.
  5. Surveillance des tâches Cron : Les développeurs peuvent surveiller et gérer les tâches Cron à l'aide d'outils tels que le plugin WP Crontrol, qui fournit une interface conviviale pour le débogage et la gestion des tâches programmées.
  6. Plugins Cron et Cache : La collaboration entre WordPress Cron et les plugins de cache est cruciale, car les plugins de cache peuvent interférer avec l'exécution des tâches planifiées, ce qui nécessite une configuration minutieuse pour des performances optimales.
  7. Avantages de la fusion de System Cron et de WordPress Cron : En fusionnant System Cron et WordPress Cron, les propriétaires de sites web peuvent garantir une exécution fiable des tâches planifiées sans dépendre uniquement des visites des utilisateurs, ce qui permet d'éviter les retards dans les processus critiques.

Table des Matières

Qu'est-ce que Cron ?

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

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

Système Cron

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

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

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

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

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

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é

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

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

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

a) Approche classique (avec wget)

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)

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

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

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

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

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

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

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

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

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

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.

Cet article a-t-il été utile ? Merci pour vos commentaires !

Totalement inutile

Légèrement utile

Très utile

Mode FAQ

/

Mode d'apprentissage

  1. Qu'est-ce que Cron et pourquoi est-il important pour WordPress ?

    Cron est un outil de planification utilisé pour automatiser des tâches dans WordPress, telles que la mise à jour du contenu ou l'exécution de scripts de maintenance, garantissant une exécution en temps voulu sans intervention manuelle.

  2. Quelles sont les différences entre WordPress Cron et System Cron ?

    WordPress Cron s'appuie sur les visites des utilisateurs pour déclencher les tâches programmées, tandis que System Cron fonctionne de manière indépendante sur le serveur d'hébergement, ce qui permet une plus grande fiabilité et un meilleur contrôle de l'exécution des tâches.

  3. Comment puis-je intégrer WordPress Cron avec System Cron pour une meilleure fiabilité ?

    En mettant en place un travail Cron Système qui appelle régulièrement le Cron WordPress, vous pouvez vous assurer que les tâches programmées sont exécutées de manière fiable, quelle que soit l'activité de l'utilisateur sur le site.

  4. Puis-je ajouter mes propres tâches Cron dans WordPress ?

    Oui, WordPress permet aux développeurs d'ajouter des tâches Cron personnalisées à l'aide d'extraits de code, en spécifiant les intervalles et les tâches à exécuter, qu'il s'agisse d'événements récurrents ou uniques.

  5. Comment puis-je surveiller et gérer les tâches Cron dans WordPress ?

    Des outils tels que le plugin WP Crontrol fournissent une interface conviviale pour la surveillance et la gestion des tâches Cron, permettant aux développeurs de déboguer et d'optimiser les tâches programmées de manière efficace.

  6. Les plugins de cache affectent-ils l'exécution des tâches Cron dans WordPress ?

    Oui, les plugins de cache peuvent interférer avec l'exécution des tâches Cron en sautant l'exécution de PHP sur les pages mises en cache. Une configuration adéquate est nécessaire pour garantir que les tâches planifiées s'exécutent sans problème avec les plugins de cache.

  7. Comment puis-je garantir la fiabilité du Cron et éviter les retards dans les processus critiques ?

    En combinant System Cron et WordPress Cron, et en utilisant des outils de surveillance et de gestion des tâches programmées, les propriétaires de sites web peuvent garantir la fiabilité de Cron et éviter les retards dans les processus essentiels, tels que les mises à jour de contenu et les scripts de maintenance.

Navigation dans les cours: Compétences WordPress

Liens de contenu (14)

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