Отложенная публикация и wp-cron.php
Собираясь уехать на недельку отдохнуть, я решил опробовать такую функцию WordPress, как отложенная публикация записи. Написал несколько статей, распределил даты публикации на неделю вперед и попробовал испытать эту возможность блога на одной из статей. Однако WordPress отказался публиковать статью в назначенное время, а счетчик минут, оставшихся до публикации стал почему-то увеличиваться. Воспользовавшись поиском, я узнал, что такая проблема возникает у многих блогеров, а путей ее решения никто не знает. После долгих изысканий на англоязычных форумах я узнал почему WordPress не хочет публиковать статьи в заданное время и нашел способ как это исправить.
Любые действия, которые регулярно повторяются WordPress выполняет через использование псевдо-крона в wp-cron.php, однако существует вероятность того, что у вашего хостера неправильно настроен сервер для работы этого файла. В частности, в настройках сервера должно быть прописано разрешение для функции fsockopen использовать локальные адреса. Если же на локальные адреса прописан запрет скрипт в файле wp-cron.php выполняться не будет. Можно, конечно, попросить хостера изменить настройки сервера, но большинство хостеров вам в этом откажет. Поэтому используем обходной путь. Открываем на редактирование файл wp-cron.php и комментируем (добавляя в начало символ #) строчки:
23 24 | if ( $_GET['check'] != wp_hash('187425') ) exit; |
Теперь, если вы откроете ссылку вида http://www.myblog.ru/wp-cron.php скрипт в этом файле выполнится и все ваши просроченные публикации немедленно будут опубликованы. Конечно, ручное дергание файла wp-cron.php нам ни в коем случае не подходит, а поэтому настраиваем выполнение данного скрипта через демон cron. Его настройка осуществляется разными путями у различных хостеров, читайте документацию по хостингу. В моем случае мне помогла такая команда:
0 * * * * /usr/local/bin/php5 -q http://www.wordpressplugins.ru/wp-cron.php |
То есть cron будет выполнять скрипт в wp-cron.php каждый час. Точное время публикации записи соблюдено не будет, но опоздание с публикацией в течение часа по сути не так уж и страшно, главное, что сама отложенная публикация будет работать. Попутно решилась проблема с плагином WordPress Database Backup, который именно по этой причине не хотел отправлять мне бекапы на имейл раз в неделю.
Что делать, если ваш хостинг не предоставляет возможности использовать демон cron? Есть такой сервис как
PS. Данная статья запланирована на публикацию в 3:50 ночи 3 августа, следовательно опубликована она будет в 4 часа утра 3 августа.
Понравился пост? Подпишись на обновления по RSS или Twitter !
#61,
Приветствую.
Подскажите, а почему статья помечена как неактуальная? Я пробовал через cron запускать wp-cron.php на версии 4.2.2 примерно вот так:
php -f wp-cron.php
И судя по всему, он отрабатывает как положено, по крайней мере, отложенную запись опубликовал.
#62,
потому что указанного кода в файле больше нет. а так то да, дергать wp-cron.php самостоятельно можно по-прежнему.
#63,
Кода в файле нет, а проблема осталась. Что так и дергаться?
#64,
а что остается тем, у кого кривые сервера?
только дергаться.