ЗАПРОС WP возвращает пустой набор при запуске из запланированного события WP-CRON


Я пытаюсь составить расписание wp cron, чтобы ежечасно проверять, нужно ли нам отправлять напоминания по электронной почте пользователю, удовлетворяющему определенным критериям.

Моя настройка выглядит так

  • У меня есть класс reminders, который выполняет всю фильтрацию запросов WP, настраивает мои электронные письма, обновляет мои сообщения после отправки электронного письма и т. Д. Для CPT, удовлетворяющего указанным критериям.
  • В этом классе у меня есть крючок в моей функции _construct(), чтобы добавить его к моей функции public function do_reminders(), чтобы мое запланированное мероприятие.
  • Мое запланированное событие было добавлено при активации плагина
  • Я создаю свой объект reminders, подключенный к init, чтобы конструкция могла добавить функцию do_reminders к запланированному подключению
  • Я использую плагин Core Control , чтобы убедиться, что моя функция do_reminders подключена к запланированному событию, и это так.

Проблема

Во время выполнения запланированного события оно не рассылает напоминания, как должно.

Если я проверю свой do_reminders функция, запустив ее в init, будет работать, но когда событие расписания запускает ее, кажется, что мой запрос возвращает пустой набор.

Итак, мои вопросы будут заключаться в том, как это отладить? Что здесь на самом деле происходит? Запускаются ли запланированные события до того, как объекты запроса будут доступны?

Я пытался понять, почему моя функция работает, если я вызываю ее непосредственно из "инициализации", как это

add_action( 'init', 'my_test_check');
function my_test_check(){
  $reminders = new MY_Reminders();
  $reminders->do_reminders();
}

Но когда это называется так

add_action( 'my_scheduled_hook', 'my_test_check');
function my_test_check(){
  $reminders = new MY_Reminders();
  $reminders->do_reminders();
}    

Мой запрос возвращает пустой набор, поэтому в принципе, ничего не рассылается! У меня заканчиваются идеи о том, почему это происходит и что тестировать дальше

Author: bynicolas, 2016-08-24

1 answers

Хорошо, я потратил ужасно много времени, пытаясь это отладить! При поиске я использовал $wpdb->queries вместе с define( 'SAVEQUERIES', true ); для отладки запросов, выполняемых при запуске wp-cron.

Затем я узнал, что при выполнении заданий cron мой запрос был установлен в 'post_status' => trash! Неудивительно, что я не получил никаких ошибок, и, как оказалось, на днях я опробовал конкретный запрос, и эта функция все еще работала в моей теме functions.php и влияла только на не вошедших в систему пользователей, которые переопределяли мой cron запрос!

Короче говоря, ничего общего с wp-cron или wp_query (и даже с моим кодом), очистите свои тесты (я должен знать лучше::facepalm) и используйте инструменты отладки, чтобы помочь вам найти виновника!

 1
Author: bynicolas, 2016-08-25 05:04:37