Как заранее опубликовать пост

👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

В одном из блогов потребовалось его хозяину делать посты, которые были как бы уже опубликованными. Не запланированными на определенную дату, а именно опубликованными. Не знаю, для чего это ему нужно, но проблема оказалась вполне разрешимая благодаря коду, предложенному Сергеем Бирюковым.

Если вы хотите заранее опубликовать пост будущей датой, не запланировать, как это позволяет WordPress, а именно уже опубликовать, то откройте файл functions.php, и вставьте в него такой код:

function publish_future_posts_immediately($post_id, $post) {
	global $wpdb;
	if ( $post->post_status == 'future' ) {
		$wpdb->update($wpdb->posts, array( 'post_status' => 'publish' ), array( 'ID' => $post_id ));
		wp_clear_scheduled_hook('publish_future_post', $post_id);
	}
}
add_action('save_post', 'publish_future_posts_immediately', 10, 2);

Теперь если вы при публикации поста выберете дату в будущем, то при нажатии на ссылку «запланировать» получите запись со статусом «опубликована» а не «запланирована.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Ваня

    Спасибо большое, как раз нужно реализовать такую функцию для афиши мероприятий)

    Ответить
  2. Piterkoshka

    А я хочу запланировать записи на несколько месяцев вперед. Как мне реализовать такое? Нигде толком не могу найти такой информации.

    Ответить
    1. tiaurus автор

      В WordPress есть встроенный функционал планирования: перед тем, как опубликовать запись, можно установить дату и время публикации. Хоть на месяц вперед, хоть на год.

      Ответить
  3. Piterkoshka

    В том и дело, что обычным путем через планирование записи эти записи потом значатся как просроченные. Самостоятельно по каким-то причинам они на сайте не публикуются. Читала уже множество материала на данную тему, но везде только косвенно обо всем.

    Ответить
    1. tiaurus автор

      Мне кажется, что это не проблема WordPress, ошибка возникает на стороне сервера, не обрабатывающего директивы cron (запланированные события). Обратитесь к хостеру, пусть разбирается с этим. Если он не может или не хочет разбираться — меняйте хостера на другого, на хостинге которого cron работает правильно.

      Так же подобное я иногда замечал при использовании плагинов кэширования. Однако в конечном итоге все равно все сводилось к работе cron.

      В качестве решения можно использовать плагин WP Missed Schedule Fix Failed Future Posts. Однако я бы поменял хостера, раз он не может или не хочет обеспечить нормальную работу вашего сайта.

      Ответить
      1. cyrill

        Это не ошибка на стороне сервера, а сознательно встроенная в CMS система вымогательства.

        Разработчики объясняют, что типа если с одной CMS управляется много сайтов, да еще статьи с каждого сайта выходят на всех языках народов мира сразу, то возникает повышенная нагрузка на сервер. Поэтому, типа для вашего же блага (только вы от дурости этого не понимаете) мы сделали заведомую просрочку для публикаций — тогда публикации происходят в разное время, когда посетитель зайдет на сайт, и вы экономите копейки на тарифах хостинга.

        В реальности же любой сайт в наше время имеет представительство в соцсетях, где дублируются его основные материалы. При этом для каждой соцсети существует свое оптимальное время для публикации материалов. Так вот, WordPress сделан так, чтобы возможности для грамотного кросспостинга максимально нарушить. Чтобы вроде возможности есть, а реально их бы не было, или чтобы через ж…
        Тем самым каждому владельцу WordPress — прикиньте, сколько их — ненавязчиво предлагается заплатить по $50 в год за подключение коммерческих плагинов, в которых «исправлены недостатки» и «расширены базовые возможности».

        В свое время в репозитории был специальный плагин, обходящий зловредную функцию и публикующий материалы именно когда надо — они его из репозитория выкинули. Есть на гитхабе, вот только работает ли он с последними версиями WP — х.з.

        Ответить
  4. Piterkoshka

    Я читала, что надо cron каким-то образом настроить самостоятельно через панель хостинга?

    Ответить
    1. tiaurus автор

      На этот вопрос вам даст правильный ответ только хостер. Я могу лишь гадать.

      Ответить