Как обновить старые посты WordPress?
У меня уже есть 9000 опубликованных постов на WordPress.
Нужно решение, как их опубликовать заново (обновить) по расписанию, например каждые 15 минут публиковать записи по порядку.
Дополнительно:
Чтобы заново родиться нужно сперва умереть.
Ты хочешь изменить дату публикации или что? И зачем?
Во вторых обновлять контент - это обновлять контент, а не даты публикации. Этим ты только обманываешь пользователей и ПС. Соответственно сделаешь только хуже.
Ответы:
Из простого - плагин
Сложнее - wp_update_post()
Наверное, весь массив постов получать смысла нет, поэтому получаемые данные можно ограничить какой-то цифрой - 100, 200 - обновлять это количество постов за день
Перебираем посты, на каждый цикл используем wp_update_post().
Все это можно упаковать в файл и запускать его кроном
- Владимир, а можете подробнее рассказать или написать пример кода с использованием wp_update_post()? Я просто в программировании нуб. Сайт этот знаю, на который вы ссылаетесь. Отличный сайт, часто в него заглядываю.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если нужно “обновлять” старые записи по расписанию, сначала определитесь, что именно должно происходить: менять дату публикации, поднимать запись в ленте, переводить из черновика в публикацию или реально менять контент. Для SEO бездумно менять даты у 9000 записей каждые 15 минут я бы не советовал: это может выглядеть как искусственное обновление без пользы.
Если задача техническая — по очереди менять дату публикации на текущую, это можно сделать через WP-Cron или системный cron. Лучше не запускать 9000 операций за один запрос, а хранить указатель на последнюю обработанную запись.
Пример логики для WP-Cron:
add_action('my_republish_old_post', function () { $last_id = (int) get_option('my_republish_last_id', 0); $posts = get_posts([ 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => 1, 'orderby' => 'ID', 'order' => 'ASC', 'post__not_in' => [$last_id], 'fields' => 'ids', ]); if (!$posts) { delete_option('my_republish_last_id'); return; } $post_id = $posts[0]; wp_update_post([ 'ID' => $post_id, 'post_date' => current_time('mysql'), 'post_date_gmt' => current_time('mysql', true), ]); update_option('my_republish_last_id', $post_id); });
Но в этом примере есть минус:
post__not_inне гарантирует нормальную последовательность после первого прохода. Надёжнее хранить очередь ID в отдельной опции или таблице, либо выбирать записи по старой дате.Расписание:
add_filter('cron_schedules', function ($schedules) { $schedules['every_15_minutes'] = [ 'interval' => 15 * 60, 'display' => 'Every 15 minutes', ]; return $schedules; });
И зарегистрировать событие один раз при активации плагина. Не делайте это на каждом открытии страницы.
Если сайт большой, лучше использовать настоящий системный cron и WP-CLI: он стабильнее, чем псевдо-cron WordPress, который зависит от посещений сайта. И обязательно логируйте обработанные ID, чтобы можно было остановить процесс и понять, что уже изменено.
Практически: обновляйте только те материалы, где реально проверен и обновлён контент. Просто менять дату тысячам старых записей ради “свежести” — слабая стратегия и потенциальный SEO-риск.