J'essaie de créer un programme wp cron pour vérifier toutes les heures si nous devons envoyer des rappels par courrier électronique à des utilisateurs répondant à des critères spécifiques.
Ma configuration ressemble à ceci
reminders
qui s'occupe de filtrer toutes les requêtes WP, de configurer mes courriers électroniques, de mettre à jour mes messages une fois le courrier envoyé, etc._construct()
à ajouter à mon public function do_reminders()
à mon événement planifié.reminders
accroché à init
afin que la construction puisse ajouter la fonction do_reminders
au hook planifiédo_reminders
est connectée à mon événement planifié, et c'est le cas.Le problème
Pendant que l'événement planifié est exécuté, il n'envoie pas les rappels qu'il devrait envoyer.
Si je teste ma fonction do_reminders
en l'exécutant à init
, cela fonctionnera, mais lorsque l'événement de planification le déclenche, il semble que ma requête renvoie un ensemble vide.
Donc mes questions seraient, comment déboguer ceci? Qu'est-ce qui se passe vraiment ici? Les événements planifiés sont-ils déclenchés avant que les objets de requête ne soient accessibles?
J'ai essayé de comprendre pourquoi ma fonction fonctionne si je l'appelle directement depuis 'init' comme ceci
add_action( 'init', 'my_test_check');
function my_test_check(){
$reminders = new MY_Reminders();
$reminders->do_reminders();
}
mais quand on l'appelle comme ça
add_action( 'my_scheduled_hook', 'my_test_check');
function my_test_check(){
$reminders = new MY_Reminders();
$reminders->do_reminders();
}
ma requête renvoie un ensemble vide, si bien que rien n'est envoyé! Je suis à court d'idées pour savoir pourquoi cela se produit et quoi tester ensuite
Ok, j'ai passé énormément de temps à essayer de résoudre ce problème! En cherchant autour de moi, j'ai utilisé $wpdb->queries
avec define( 'SAVEQUERIES', true );
pour déboguer les requêtes effectuées lorsque wp-cron était en cours d'exécution.
j'ai ensuite découvert que lorsque les tâches cron étaient en cours d'exécution, ma requête était définie sur 'post_status' => trash
! Rien d'étonnant à ce que je n'ai eu aucune erreur et que, finalement, j'ai testé une requête spécifique l'autre jour. Cette fonction fonctionnait toujours dans mon thème functions.php
et n'affectait que les utilisateurs non connectés, ce qui annulait ma requête cron!
Bref récit, rien à voir avec wp-cron ou wp_query (et même mon code), nettoyez après vos tests (je devrais mieux connaître :: facepalm) et utilisez des outils de débogage pour vous aider à trouver le coupable!