Ваша проблема, как правило, такова:
if ( ! wp_next_scheduled( 'quote_cron_hook' ) ) {
wp_schedule_event( time(), 'every_two_days', 'quotes_cron_hook' );
}
Если у вас quote_cron_hook
указано quotes_cron_hook
, у каждого есть s
, а у другого - нет.Это несоответствие приведет к тому, что условие никогда не завершится неудачей, поскольку событие названо неверным, оно никогда не запланировано, и это условие передается при каждом отдельном запросе.Который в свою очередь запускает функцию wp_schedule_event
со временем запуска time
(см. Ниже).
Если вы посмотрите документацию по ссылке wp_schedule_event
ниже.Первый аргумент, где у вас есть time()
, это
$ timestamp (целое число) (обязательный) Первый раз, когда вы хотите, чтобы событие произошло.Это должно быть в формате отметки времени UNIX.WP cron использует время UTC / GMT, а не местное время.Используйте time (), который всегда равен GMT в WordPress.
Обратите внимание: В первый раз, когда вы хотите, чтобы событие произошло , с time()
, которое сейчас, ипоскольку он назван неверно, он выполняет эту загрузку каждой страницы, а затем запускается прямо сейчас.
Конечно, вы можете установить time()
на что-то другое, но это просто замаскирует проблему.
Другие вещи
Это также может быть неправильно.
wp_schedule_event( time(), 'every_two_days', 'quotes_cron_hook' );
, более конкретно, глядя на документацию
https://codex.wordpress.org/Function_Reference/wp_schedule_event
$ recurrence (строка) (обязательно) Как часто событие должно повторяться.Допустимые значения:
- ежечасно
- два раза
- ежедневно
По умолчанию: нет
Не знаюне вижу там every_two_days
, если это не документировано.Честно говоря, я не очень часто использовал планировщик WP.Default: None
, вероятно, то, что вы на самом деле имеете здесь, так как WP не распознает это значение, поэтому оно возвращается к нулю.Но что именно это делает, я не уверен.
Еще больше Другие вещи
Как я сказал в комментариях (и это может быть хорошо для вашего использования, но продолжайтеэто имеет в виду)
Планировщик wp может запускаться только при наличии активного запроса, поэтому планировщик wp может только гарантировать, что задание не будет выполнено раньше заданного времени.Нет грантополучателя, что он будет запущен в определенное время после этого, он будет выполняться по следующему запросу после отведенного времени
Добавить это в wp-config.php
define('DISABLE_WP_CRON', true);
Отключить встроенный cron / планировщик.Затем перейдите в C-Panel или отредактируйте crontab (crontab -e) и добавьте это задание cron для запуска каждую минуту (или некоторый полезный интервал)
php -q pathtowp/wp-cron.php
Что это делает, он берет под контроль время планировщикаподальше от WordPress и отдайте его «актуальному» CRON-приложению (в Linux)Таким образом, он не полагается на загрузку страниц.
Но, как я уже сказал, и потому что это сообщение, которое кто-то должен просмотреть, нормальное поведение WP может быть для вас вполне нормальным.Обычно, если я что-то делаю с планировщиком, я просто полагаюсь на настоящий CRON, вот почему я упомянул об этом.
Надеюсь, это поможет!