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.
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: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.
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.
Il y a deux saveurs d'événements Cron que vous pouvez planifier avec quelques lignes de code:
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>
Pour planifier l'événement récurrent, nous utilisons la fonction wp_schedule_event ($ horodat, $ récurrence, $ hook, $ args) qui prend 4 arguments:
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>
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>
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é.
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>
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.
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>
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:
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>
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>
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!