web-dev-qa-db-fra.com

WP_QUERY WP-CRON, un événement planifié à partir d'un événement planifié

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

  • J'ai une classe 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.
  • Dans cette classe, j'ai un point d'ancrage dans ma fonction _construct() à ajouter à mon public function do_reminders() à mon événement planifié.
  • Mon événement planifié a été ajouté lors de l'activation du plugin
  • Je crée mon objet reminders accroché à init afin que la construction puisse ajouter la fonction do_reminders au hook planifié
  • J'utilise le plug-in Core Control pour m'assurer que ma fonction 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

2
bynicolas

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!

1
bynicolas