Как обновить старые посты WordPress?

Ссылка скопирована
1 ответ

У меня уже есть 9000 опубликованных постов на WordPress.

Нужно решение, как их опубликовать заново (обновить) по расписанию, например каждые 15 минут публиковать записи по порядку.

Дополнительно:

Чтобы заново родиться нужно сперва умереть.
Ты хочешь изменить дату публикации или что? И зачем?

  • Refguser, Да, хочу изменить дату публикации у всех постов, по расписанию.
  • Alivgon, зачем?
  • Вроде как это полезно, для поисковиков. Обновлять старый контент.
  • Alivgon, во первых полнейшие глупости.
    Во вторых обновлять контент - это обновлять контент, а не даты публикации. Этим ты только обманываешь пользователей и ПС. Соответственно сделаешь только хуже.
  • Refguser, Ок. Спасибо!
  • Ответы:

    Из простого - плагин

    Сложнее - wp_update_post()
    Наверное, весь массив постов получать смысла нет, поэтому получаемые данные можно ограничить какой-то цифрой - 100, 200 - обновлять это количество постов за день
    Перебираем посты, на каждый цикл используем wp_update_post().
    Все это можно упаковать в файл и запускать его кроном

    • Владимир, а можете подробнее рассказать или написать пример кода с использованием wp_update_post()? Я просто в программировании нуб. Сайт этот знаю, на который вы ссылаетесь. Отличный сайт, часто в него заглядываю.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Игорь NetOps Ответ

    Если нужно “обновлять” старые записи по расписанию, сначала определитесь, что именно должно происходить: менять дату публикации, поднимать запись в ленте, переводить из черновика в публикацию или реально менять контент. Для 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);
    });

    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;
    });

    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-риск.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно