Maison > Tutoriel CMS > WordPresse > Maîtriser WordPress Cron pour la planification des événements

Maîtriser WordPress Cron pour la planification des événements

Christopher Nolan
Libérer: 2025-02-19 11:51:14
original
375 Les gens l'ont consulté

Maîtriser WordPress Cron pour la planification des événements

Les plats clés

  • WordPress Cron est un ensemble de fonctions qui permet la planification des tâches sur un site WordPress, en cours d'exécution lorsqu'une page est chargée. Il est différent du cron d'Unix car il n'est pas toujours à la recherche de nouvelles tâches, il exécute plutôt des tâches lors du chargement de la page.
  • Il existe deux types d'événements CRON qui peuvent être planifiés: des événements uniques, qui fonctionnent une fois et plus jamais jusqu'à reprogramber, et des événements récurrents, qui fonctionnent sur un calendrier défini indéfiniment. Les deux types nécessitent la création d'une «action» personnalisée qui doit être enregistrée auprès de Cron.
  • Les événements non scheduling sont essentiels, surtout lors de l'utilisation des plugins, car WordPress continuera à tenter d'exécuter des événements même après que un plugin soit désactivé ou supprimé. Pour dénouer un événement, il faut connaître le nom du crochet et le prochain heure prévue pour le Cron Run.
  • Les intervalles CRON personnalisés peuvent être définis en se connectant au filtre CRON_SCHEDULES et en ajoutant un intervalle personnalisé. Cela peut être utilisé lors de la planification des événements en utilisant Cron.

WordPress Cron est l'une des fonctionnalités les plus utiles que vous voudrez apprendre et comprendre si, comme moi, vous passez beaucoup de temps à travailler avec WordPress.

Maîtriser WordPress Cron pour la planification des événements

Pouvoir exécuter certaines fonctions sur un calendrier serré est essentiel pour tout CMS et WordPress a un ensemble de fonctions qui aident à rendre ce processus très simple et presque sans effort.

Dans cet article, je couvrirai les fonctionnalités de WordPress Cron suivantes:
  • En quoi WordPress cron est-il différent de votre cron normal
  • Planification d'un événement récurrent
  • planifier un seul événement
  • Défenser un événement
  • Spécification des intervalles de cron personnalisés

Qu'est-ce que Cron?

Vous connaissez probablement le terme «cron» en ce qui concerne le planificateur basé sur le temps dans Unix Systems et bien que WordPress ’Cron soit différent; L'idée principale derrière est la même.

Quelques exemples de la façon dont WordPress utilise son système Cron en interne consulte les mises à jour du thème et des plugins et même la vérification s'il y a des articles prêts à être publiés.

En quoi WordPress Cron est-il différent?

Si vous connaissez le cron d'Unix, vous pensez probablement que le cron de WordPress est toujours à la recherche de nouvelles tâches et les exécute au fur et à mesure. C'est loin de la vérité et je vais expliquer pourquoi peu.

Cron de WordPress s'exécute lorsqu'une page est chargée, qu'il s'agisse d'une page frontale ou arrière. En d'autres termes, lorsqu'une page est chargée sur votre site Web, WordPress vérifie s'il y a des tâches ou des événements qui doivent les exécuter et les exécuter. Si vous pensez que ce n'est pas idéal, vous avez absolument raison.

Si vous avez un site Web qui n'obtient pas trop de trafic et que vous avez une tâche qui doit être exécutée à un moment précis, WordPress ne saura pas que la tâche est due jusqu'à ce que quelqu'un ne visite votre site Web. Même si c'est un bot de moteur de recherche rampant votre site Web.

Planification des événements avec cron

Il y a deux saveurs d'événements Cron que vous pouvez planifier avec quelques lignes de code:

  • Événements simples - ne faites qu'une seule fois et plus jamais jusqu'à ce qu'il soit reprogrammé.
  • Événements récurrents - Exécutez sur un calendrier et est défini pour se réocnuter indéfiniment en utilisant un intervalle de temps.

Planification d'un événement récurrent

Planification d'un événement récurrent nécessite de créer une «action» personnalisée qui doit également être enregistrée auprès de Cron. Une fois que le cron s'exécute, la fonction attachée à «l'action» personnalisée que vous avez créée plus tôt est exécutée.

Jetons un coup d'œil à l'exemple suivant où nous allons supprimer quotidiennement les révisions de post.

Tout d'abord, nous créons notre «action» personnalisée qui lui aura attaché la fonction que nous voulons exécuter lorsque le crochet est appelé par Cron.

<span><span><?php
</span></span><span><span>// delete_post_revisions will be call when the Cron is executed
</span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' );
</span></span><span>
</span><span><span>// This function will run once the 'delete_post_revisions' is called
</span></span><span><span>function delete_all_post_revisions() {
</span></span><span>
</span><span>	<span>$args = array(
</span></span><span>		<span>'post_type' => 'post',
</span></span><span>		<span>'posts_per_page' => -1,
</span></span><span>		<span>// We don't need anything else other than the Post IDs
</span></span><span>		<span>'fields' => 'ids',
</span></span><span>		<span>'cache_results' => false,
</span></span><span>		<span>'no_found_rows' => true
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>$posts = new WP_Query( $args );
</span></span><span>
</span><span>	<span>// Cycle through each Post ID
</span></span><span>	<span>foreach( (array)$posts->posts as $post_id ) {
</span></span><span>
</span><span>		<span>// Check for possible revisions
</span></span><span>		<span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) );
</span></span><span>
</span><span>		<span>// If we got some revisions back from wp_get_post_revisions
</span></span><span>		<span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) {
</span></span><span>		  
</span><span>			<span>foreach( $revisions as $revision_id ) {
</span></span><span>
</span><span>				<span>// Do a final check on the Revisions
</span></span><span>				<span>if( wp_is_post_revision( $revision_id ) ) {
</span></span><span>					<span>// Delete the actual post revision
</span></span><span>					<span>wp_delete_post_revision( $revision_id);
</span></span><span>				<span>}
</span></span><span>			<span>}
</span></span><span>		<span>}
</span></span><span>	<span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Pour planifier l'événement récurrent, nous utilisons la fonction wp_schedule_event ($ horodat, $ récurrence, $ hook, $ args) qui prend 4 arguments:

  • $ horodatage - (entier) (requis) La première fois que vous souhaitez que l'événement se produise. Cela doit être dans un format à horodat Unix. WP Cron utilise l'heure UTC / GMT, pas l'heure locale. Utilisez le temps (), qui est toujours GMT dans WordPress. (current_time («horodat») est l'heure locale dans WordPress.)
  • $ Récurrence - (String) (requis) à quelle fréquence l'événement doit se reproduire. Les valeurs valides sont «toutes les heures», «à deux quotidiens» et «quotidiennes». Nous verrons comment créer nos propres intervalles de temps plus tard.
  • $ crochet - (chaîne) (requis) le nom d'un crochet d'action à exécuter.
  • $ args - (Array) (facultatif) Arguments pour passer aux fonctions de crochet.

d'abord, nous nous assurons que l'événement n'a pas été prévu auparavant et si ce n'est pas le cas, nous allons de l'avant et le planifions.

<span><span><?php
</span></span><span><span>// Make sure this event hasn't been scheduled
</span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>	<span>// Schedule the event
</span></span><span>	<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion

Notez que vous pouvez également ajouter à TIE cet extrait de code à une action. Si vous êtes un écrivain de plugin, vous pouvez configurer l'événement planifié pour exécuter la première fois que la page Options du plugin est visitée. Pour un exemple beaucoup plus simple, nous allons le lier à l'action init de WordPress.

<span><span><?php
</span></span><span><span>// Add function to register event to WordPress init
</span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event');
</span></span><span>
</span><span><span>// Function which will register the event
</span></span><span><span>function register_daily_revision_delete_event() {
</span></span><span>	<span>// Make sure this event hasn't been scheduled
</span></span><span>	<span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>		<span>// Schedule the event
</span></span><span>		<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span>	<span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion

Maintenant que vous savez comment planifier des événements récurrents, jetons un coup d'œil à la création d'un seul événement qui ne fonctionnera plus jamais jusqu'à ce qu'il soit reprogrammé.

planifier un seul événement

Tout comme son nom l'indique, un seul événement est celui qui s'exécute une fois, puis il s'arrête. Cet événement unique peut toujours être reprogrammé si nécessaire.

Le concept derrière est le même que les événements récurrents. Vous enregistrez d'abord un crochet personnalisé qui est appelé par Cron lorsqu'il s'exécute sur le serveur. Une fois que Cron appelle le crochet, sa fonction est exécutée et c'est essentiellement la façon dont vous faites avancer les choses.

Par exemple, nous allons définir une date d'expiration pour les publications. Les articles expireront 30 jours après avoir été publié. Nous allons nous connecter au Publish_Post afin que nous puissions planifier notre événement unique dès que la publication sera publiée et que le compte commence.

Configuration de la fonction qui supprimera le post après 30 jours.

<span><span><?php
</span></span><span><span>// delete_post_revisions will be call when the Cron is executed
</span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' );
</span></span><span>
</span><span><span>// This function will run once the 'delete_post_revisions' is called
</span></span><span><span>function delete_all_post_revisions() {
</span></span><span>
</span><span>	<span>$args = array(
</span></span><span>		<span>'post_type' => 'post',
</span></span><span>		<span>'posts_per_page' => -1,
</span></span><span>		<span>// We don't need anything else other than the Post IDs
</span></span><span>		<span>'fields' => 'ids',
</span></span><span>		<span>'cache_results' => false,
</span></span><span>		<span>'no_found_rows' => true
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>$posts = new WP_Query( $args );
</span></span><span>
</span><span>	<span>// Cycle through each Post ID
</span></span><span>	<span>foreach( (array)$posts->posts as $post_id ) {
</span></span><span>
</span><span>		<span>// Check for possible revisions
</span></span><span>		<span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) );
</span></span><span>
</span><span>		<span>// If we got some revisions back from wp_get_post_revisions
</span></span><span>		<span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) {
</span></span><span>		  
</span><span>			<span>foreach( $revisions as $revision_id ) {
</span></span><span>
</span><span>				<span>// Do a final check on the Revisions
</span></span><span>				<span>if( wp_is_post_revision( $revision_id ) ) {
</span></span><span>					<span>// Delete the actual post revision
</span></span><span>					<span>wp_delete_post_revision( $revision_id);
</span></span><span>				<span>}
</span></span><span>			<span>}
</span></span><span>		<span>}
</span></span><span>	<span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

assez simple, non? Nous devons maintenant planifier l'événement une fois le message réellement publié. Afin d'accomplir cette tâche, nous devons utiliser la fonction WP_Schedule_single_event ($ horodat, $ hook, $ args) qui prend 3 arguments.

  • $ horodatage - (entier) (requis) Le temps où vous souhaitez que l'événement se produise. Cela doit être dans un format à horodat Unix.
  • $ crochet - (chaîne) (requis) le nom d'un crochet d'action à exécuter.
  • $ args - (Array) (facultatif) Arguments pour passer à la fonction de crochet.

Voici rapidement comment toutes ces actions et crochets sont assemblés.

<span><span><?php
</span></span><span><span>// Make sure this event hasn't been scheduled
</span></span><span><span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>	<span>// Schedule the event
</span></span><span>	<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion

Nous utilisons des constantes de temps que WordPress a en place pour nous faciliter la vie. Pour plus d'informations sur ces constantes, vous pouvez aller à «utiliser des constantes de temps», mais voici un aperçu rapide:

  • minute_in_seconds = 60 (secondes)
  • hour_in_seconds = 60 * minute_in_seconds
  • day_in_seconds = 24 * hour_in_seconds
  • semaine_in_seconds = 7 * day_in_seconds
  • an_in_seconds = 365 * day_in_seconds

Événements non scheduling

Maintenant que vous savez comment planifier des événements récurrents et uniques, il va également être utile de savoir comment dénoncer ces événements.

Vous vous demandez peut-être, pourquoi voudriez-vous décoller des événements? Il y a une bonne raison, surtout si vous incluez des événements d'horaire de tri dans vos plugins.

Cons sont stockés sur la table WP_Options et en désactivant et en supprimant simplement votre plugin. WordPress essaiera toujours d'exécuter vos événements même si ledit plugin n'est plus disponible. Cela dit, assurez-vous de vous déshabiller correctement dans votre plugin ou une implémentation personnalisée.

Les événements Cron non schématriques sont relativement faciles, tout ce que vous devez savoir est le nom du crochet et quand est la prochaine heure prévue que le cron particulier est censé exécuter. Nous allons utiliser wp_next_scheduled () pour trouver quand la prochaine occurrence aura lieu et ce n'est qu'alors que nous pouvons la détendre en utilisant wp_unschedule_event ().

Compte tenu de notre premier exemple, nous dénoncions l'événement de la manière suivante.

<span><span><?php
</span></span><span><span>// Add function to register event to WordPress init
</span></span><span><span>add_action( 'init', 'register_daily_revision_delete_event');
</span></span><span>
</span><span><span>// Function which will register the event
</span></span><span><span>function register_daily_revision_delete_event() {
</span></span><span>	<span>// Make sure this event hasn't been scheduled
</span></span><span>	<span>if( !wp_next_scheduled( 'delete_post_revisions' ) ) {
</span></span><span>		<span>// Schedule the event
</span></span><span>		<span>wp_schedule_event( time(), 'daily', 'delete_post_revisions' );
</span></span><span>	<span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion

Personnalisation des intervalles cron

Il est possible de définir des intervalles CRON personnalisés que vous pouvez utiliser lors de la planification des événements à l'aide de CRON. Pour ce faire, nous avons juste besoin de nous accrocher au filtre Cron_Schedules et d'ajouter le nôtre. Jetons un coup d'œil à l'ajout d'un jeu d'intervalle personnalisé pour fonctionner toutes les 10 minutes.

<span><span><?php
</span></span><span><span>// delete_post_revisions will be call when the Cron is executed
</span></span><span><span>add_action( 'delete_post_revisions', 'delete_all_post_revisions' );
</span></span><span>
</span><span><span>// This function will run once the 'delete_post_revisions' is called
</span></span><span><span>function delete_all_post_revisions() {
</span></span><span>
</span><span>	<span>$args = array(
</span></span><span>		<span>'post_type' => 'post',
</span></span><span>		<span>'posts_per_page' => -1,
</span></span><span>		<span>// We don't need anything else other than the Post IDs
</span></span><span>		<span>'fields' => 'ids',
</span></span><span>		<span>'cache_results' => false,
</span></span><span>		<span>'no_found_rows' => true
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>$posts = new WP_Query( $args );
</span></span><span>
</span><span>	<span>// Cycle through each Post ID
</span></span><span>	<span>foreach( (array)$posts->posts as $post_id ) {
</span></span><span>
</span><span>		<span>// Check for possible revisions
</span></span><span>		<span>$revisions = wp_get_post_revisions( $post_id, array( 'fields' => 'ids' ) );
</span></span><span>
</span><span>		<span>// If we got some revisions back from wp_get_post_revisions
</span></span><span>		<span>if( is_array( $revisions ) && count( $revisions ) >= 1 ) {
</span></span><span>		  
</span><span>			<span>foreach( $revisions as $revision_id ) {
</span></span><span>
</span><span>				<span>// Do a final check on the Revisions
</span></span><span>				<span>if( wp_is_post_revision( $revision_id ) ) {
</span></span><span>					<span>// Delete the actual post revision
</span></span><span>					<span>wp_delete_post_revision( $revision_id);
</span></span><span>				<span>}
</span></span><span>			<span>}
</span></span><span>		<span>}
</span></span><span>	<span>}
</span></span><span><span>}</span></span>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Conclusion

L'utilisation de Cron de WordPress ne pourrait pas être plus facile et c'est un outil très agréable et intéressant qui est sûr de vous aider à rendre votre plugin plus robuste. Apprendre toutes ces fonctions et les mettre en pratique avec des applications du monde réel est le meilleur moyen de maîtriser le cron de WordPress pour la planification des événements.

Des questions fréquemment posées sur la maîtrise de WordPress Cron

Quelle est la différence entre wp_schedule_event et wp_schedule_single_event?

Les deux fonctions sont utilisées pour planifier des événements dans WordPress. La fonction WP_Schedule_event est utilisée pour planifier un événement récurrent, ce qui signifie qu'il fonctionnera à des intervalles réguliers que vous spécifiez, tels que toutes les heures, tous les jours ou deux fois par jour. D'un autre côté, wp_schedule_single_event est utilisé pour planifier un événement unique qui fonctionnera à un moment précis dans le futur. Il est important de choisir la bonne fonction en fonction de savoir si vous souhaitez que votre événement s'exécute une fois ou à plusieurs reprises.

Pourquoi mon travail WordPress Cron ne fonctionne pas?

Il pourrait y avoir plusieurs raisons pour lesquelles votre WordPress cron Le travail ne fonctionne pas. Un problème courant est un problème avec les paramètres de temps du serveur. Si le temps du serveur n'est pas correctement défini, cela peut entraîner des problèmes de planification. Un autre problème possible est un conflit avec un plugin ou un thème. Certains plugins ou thèmes peuvent interférer avec le système WordPress Cron, le faisant dysonner. Il est également possible qu'il y ait une erreur dans votre code. Assurez-vous de tester soigneusement votre code et de vérifier les paramètres de votre serveur si vous avez des problèmes avec les travaux WordPress Cron.

Comment puis-je tester si mon travail WordPress Cron fonctionne?

Il y en a plusieurs Façons de tester si votre travail WordPress Cron fonctionne. Une méthode consiste à utiliser un plugin comme WP Control, qui vous permet de visualiser et de contrôler ce qui se passe dans le système WP-Cron. Une autre méthode consiste à utiliser des outils de débogage. En activant WP_DEBUG dans votre fichier WP-Config.php, vous pouvez voir toutes les erreurs qui se produisent lorsque votre travail CRON s'exécute. Vous pouvez également utiliser la fonction error_log dans PHP pour enregistrer des erreurs dans un fichier.

Puis-je planifier un travail Cron WordPress à exécuter à des moments précis?

Oui, vous pouvez planifier un Cron WordPress travail à exécuter à des moments précis. La fonction WP_Schedule_event vous permet de spécifier le moment où l'événement doit se produire pour la première fois, et l'intervalle à lequel il doit se reproduire. La fonction WP_Schedule_single_event vous permet de spécifier l'heure exacte où l'événement devrait se produire.

Comment puis-je insuffler un événement Cron WordPress?

Vous pouvez inspirer un événement Cron WordPress en utilisant la fonction WP_UNSCheDULE_EVENT. Cette fonction nécessite deux paramètres: l'horodatage de l'événement et le crochet d'action à la fonction que vous souhaitez inspirer. Une fois que vous avez appelé cette fonction, l'événement spécifié ne se produira plus.

Qu'est-ce qu'un crochet d'action Cron WordPress?

Un crochet d'action Cron WordPress est un identifiant unique pour votre événement CRON. Lorsque vous planifiez un événement, vous l'associez à un crochet d'action. Ensuite, vous pouvez attacher des fonctions à ce crochet d'action, et ils seront exécutés lorsque l'événement s'exécutera. Cela vous permet d'effectuer des actions spécifiques à des moments spécifiques.

Puis-je utiliser WordPress Cron pour planifier des messages?

Oui, vous pouvez utiliser WordPress Cron pour planifier des messages. WordPress lui-même utilise des travaux CRON pour gérer les publications planifiées. Lorsque vous définissez une publication pour être publiée à une date future, WordPress planifie un travail cron pour publier le message à l'heure spécifiée.

Comment puis-je afficher tous les travaux Cron WordPress planifiés?

Vous Peut afficher tous les travaux Cron WordPress planifiés à l'aide d'un plugin comme WP Control. Ce plugin fournit une interface conviviale où vous pouvez voir tous les événements planifiés, leurs intervalles et leurs prochains heures d'exécution. Vous pouvez également l'utiliser pour ajouter, modifier ou supprimer les travaux CRON.

Puis-je exécuter manuellement un travail Cron WordPress?

Oui, vous pouvez exécuter manuellement un travail Cron WordPress. Vous pouvez le faire à l'aide d'un plugin comme WP Control, qui vous permet d'exécuter tout événement CRON immédiatement. Cela peut être utile à des fins de test et de débogage.

Quelle est la différence entre un travail Cron WordPress et un vrai travail cron?

Un travail Cron WordPress est un travail pseudo-cron. Ce n'est pas un vrai travail cron car il ne s'exécute pas au niveau du serveur. Au lieu de cela, il s'exécute lorsqu'une page est chargée sur votre site WordPress. Un vrai travail Cron, en revanche, est une tâche planifiée au niveau du serveur. Il fonctionne à des moments précis, que quelqu'un visite votre site. Bien que les travaux WordPress Cron soient plus faciles à configurer et à utiliser, les travaux réels cron peuvent être plus fiables et précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal