Запуск крона через вызов wp-cron.php из командной строки вместо wget?
Можно ли просто запустить wp-cron.php
используя, например, $ php /путь/до/wordpress/wp-cron.php
вместо использования метода с wget, например wget -q -O - http://example.com/wp-cron.php>/dev/null 2>&1
?

Изучая документацию файла wp-cron.php
, видно, что можно просто вызвать $ php wp-cron.php
:
/** * Псевдо-CRON демон для планирования задач WordPress * * WP Cron запускается при посещении сайта. В случаях, когда сайт не получает * достаточного количества посещений для своевременного выполнения запланированных задач, * этот файл можно вызывать напрямую или через серверный * CRON демон определённое количество раз. * * Определение DISABLE_WP_CRON как true и прямой вызов этого файла * являются взаимоисключающими, при этом последний не зависит от первого для работы. * * HTTP-запрос к этому файлу не замедлит работу посетителя, который зашёл * в момент, когда требуется выполнение задачи cron. * * @package WordPress */
Кроме того, в командной строке можно использовать wp-cli для этих целей.
$ cd /path/to/wordpress
$ wp cron event run --due-now
Для принудительного запуска одного конкретного cron-события вне зависимости от его расписания выполните:
$ wp cron event run my_custom_cron_event
Или в виде однострочной команды для добавления в crontab, которая будет выполняться каждый час + 15 минут (14:15, 15:15, 16:15 и т.д.):
15 * * * * cd /path/to/wordpress && wp cron event run --due-now > /dev/null 2>&1

Есть ли преимущество в использовании curl
по сравнению с инструментом wp
cli?

@BarryChapman – Curl по сути это просто ещё один запрос к странице. Так что при запуске крона это может немного замедлить работу сайта.

@BarryChapman Полагаю, что любой код, зависящий от $_SERVER или других переменных сессии, не будет корректно работать при вызове из командной строки. В остальном проблем быть не должно.

Стоит отметить, что wp-cli запускает cron через HTTP. Это определенно не то же самое, что вызов wp-cron из CLI PHP, потому что, например, max_execution_time может влиять на выполнение cron-задач. Если у вас возникают проблемы с таймаутами cron-задач, я рекомендую вызывать wp-cron.php напрямую, без использования wp-cli.

Да, можно запускать кроны просто командой $ php /путь/до/wordpress/wp-cron.php
.
Альтернативно можно использовать curl
:
*/10 * * * * curl http://example.com/wp-cron.php > /dev/null 2>&1
Также вы можете добавить следующую строку в ваш wp-config.php
, чтобы отключить выполнение крон-заданий через HTTP-запросы:
define('DISABLE_WP_CRON', true);

Если вы используете curl, это все равно HTTP-запрос, поэтому, вероятно, не стоит отключать DISABLE_WP_CRON
?

@Bananaapple – При прямом вызове wp-cron.php вы обходите это ограничение. Но в то же время DISABLE_WP_CRON
предотвращает запуск cron при посещении любой страницы вашего сайта. Смотрите https://kinsta.com/knowledgebase/disable-wp-cron/ и комментарии в файле в моем ответе выше: Определение DISABLE_WP_CRON как true и прямой вызов этого файла исключают друг друга, и последний не зависит от первого для работы
.
