Всем привет. Хотя я работаю с wordpress довольно давно, никогда не использовал функцию отложенной публикации (просто не было нужды в этом). Вчера у меня возникла такая потребность. Поэтому, в этом посте я хочу коротко описать проблемы, которые появились у меня при использовании отложенной публикации, а также пути их решения.
Если коротко, то отложенная публикация из коробки у меня попросту не заработала. Я часто раньше видел вопросы пользователей о том, что у них не работает данная функция. Поэтому, я решил сам не исследовать проблему, а сразу посмотреть, как другие люди решают этот вопрос.
Очевидно, что корень проблемы кроется в настройках хостинга. По умолчанию многие хостинг-провайдеры блокируют возможность создания Socket-соединения. С другой стороны, wordpress для отложенных действий не использует стандартный CRON (который идёт вместе с *UNIX), а создаёт свой виртуальный крон wp-cron.php.
Как работает wp-cron.php? Довольно просто. Когда кто-то запрашивает некоторую страницу сайта (не важно: страницу админки или страницу основного сайта), wordpress в том числе активизирует и файл wp-cron.php. Код, описанный в этом файле, проверяет: есть ли новые задачи. Если новые задачи есть, они выполняются.
Так в чём же проблема? WordPress должен активизировать файл wp-cron.php с помощью создания Socket-соединения. Соответственно, если хостинг-провайдер запретил выполнение этой функции, то и отложенная публикация работать не будет.
Существует несколько решений данной проблемы. Самый очевидный из них — это изменение настроек вашего сервера. Вы должны сделать так, чтобы из php работали локальные Socket-вызовы. Возможно, нужно изменить конфиги. Возможно, у вас даже не подключен Socket-модуль.
К сожалению, далеко не всегда мы имеем возможность изменять окружение сайта. Поэтому, нужны другие решения. Первое из них я назвал бы грязным. Оно состоит из нескольких шагов:
Второй способ заключается в использовании какого-нибудь плагина, который чинит внутренний CRON wordpress. Лично мне понравился плагин WP Missed Schedule Fix Failed Future Posts. Важно, что из-за особенностей реализации плагина, он принесет на сайт дополнительную нагрузку. Поэтому, если вы каждый день не используете отложенную публикацию, то стоит выключить плагин.
Категории: wordpress