Intereting Posts
Установите WP_MAX_MEMORY_LIMIT выше, чем PHP.ini memory_limit Сначала используйте Orderby и meta_value_num для упорядочения чисел, затем строки Как создать страницу категории блогов с плагином Blog-Types the_post_thumbnail выполняет 2 запроса. Как оптимизировать Заявление IF в WordPress Получать дочерние сообщения типа mime, используя родительский post_ID wp_post Использовать участников с 1 сайта на другом Может ли Shopp или WP электронная торговля создавать что-то столь же обширное, как эти сайты? Другие рекомендуемые решения? Сохранение пользовательских опций WordPress? Использование оболочки PHP Api в плагине. Wrapper использует пространство имен Загрузка пользовательского языкового файла для плагина API-интерфейс WordPress, реализация вкладок на странице пользовательского меню Как я могу использовать логотип в заголовке? Какой крючок следует использовать для этого сценария в отношении процесса регистрации и обновления учетной записи / профиля? Как установить параметры для цикла поиска?

WP_QUERY возвращает пустой набор при запуске из запланированного события WP-CRON

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

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

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

Проблема

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

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

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

Я попытался понять, почему моя функция работает, если я вызываю ее непосредственно из «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(); } 

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

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

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

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