Изменение даты публикации записей в WordPress без плагинов

Иногда возникает необходимость массово или выборочно изменить дату публикации записей в WordPress без использования плагинов. Это может быть полезно при переносе контента, исправлении ошибок или для SEO-оптимизации. В этой статье разберём, как работать с датами публикаций программно, используя собственные функции и WP_Query, а также приведём примеры кода для выполнения таких задач.

Почему может понадобиться изменить дату публикации WordPress

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

  • Импорт или перенос записей с другого сайта, где даты не соответствуют вашему графику.
  • Корректировка даты после редактирования или обновления контента.
  • SEO-задачи — например, обновление дат для улучшения ранжирования.
  • Упорядочивание записей для отображения в ленте блога.

Плагинов для изменения даты много, но они могут быть избыточными или создавать нагрузку. Лучше использовать собственные решения.

Как изменить дату публикации записи WordPress программно

Для изменения даты в записи используется функция wp_update_post(). Важно понимать, что нужно передавать ID записи и новые значения даты в правильном формате.

Пример функции, которая изменяет дату публикации конкретного поста:

function wporg_change_post_date($post_id, $new_date) {
    $post = array(
        'ID' => $post_id,
        'post_date' => $new_date, // формат: 'YYYY-MM-DD HH:MM:SS'
        'post_date_gmt' => get_gmt_from_date($new_date),
    );
    wp_update_post($post);
}

Пример вызова:

wporg_change_post_date(123, '2024-06-01 10:00:00');

Обязательно передавайте дату в формате Y-m-d H:i:s. Функция сама обновит дату в базе.

Автоматическое обновление даты при изменении статуса

Иногда удобно менять дату публикации автоматически при изменении статуса записи, например, при публикации или обновлении.

Пример хука, который устанавливает текущую дату при публикации:

add_action('transition_post_status', function($new_status, $old_status, $post) {
    if ($new_status === 'publish' && $old_status !== 'publish') {
        $new_date = current_time('mysql');
        $post_data = array(
            'ID' => $post->ID,
            'post_date' => $new_date,
            'post_date_gmt' => get_gmt_from_date($new_date),
        );
        wp_update_post($post_data);
    }
}, 10, 3);

Как массово изменить дату публикации по условию

Если необходимо изменить дату сразу у нескольких записей, можно использовать WP_Query для выборки и цикл, чтобы обновить каждую запись.

Пример: сдвинуть дату публикации всех записей на 7 дней вперёд:

function wporg_shift_post_dates($days_shift = 7) {
    $query = new WP_Query(array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    ));

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $post_id = get_the_ID();
            $old_date = get_the_date('Y-m-d H:i:s', $post_id);
            $timestamp = strtotime($old_date) + ($days_shift * DAY_IN_SECONDS);
            $new_date = date('Y-m-d H:i:s', $timestamp);

            wporg_change_post_date($post_id, $new_date);
        }
        wp_reset_postdata();
    }
}

Запуск этой функции с параметром 7 сдвинет даты на неделю вперёд.

Фильтрация по категории или автору

Массовое изменение можно ограничить категориями, авторами или другими параметрами:

$query = new WP_Query(array(
    'post_type' => 'post',
    'posts_per_page' => -1,
    'post_status' => 'publish',
    'category_name' => 'novosti', // например, категория 'новости'
));

Это позволит менять даты только у нужных записей.

Примеры полезных плагинов и инструментов для работы с датами

Хотя мы не используем плагины для решения, иногда полезно знать о них для сравнения:

  • Clearfy Pro — оптимизация и управление сайтом, включая работу с датами и мета-данными.
  • WPRemark — расширенные возможности комментирования, где даты комментариев тоже важны.

Если нужно более удобный интерфейс, можно рассмотреть эти плагины, но для разработчиков и автоматизации лучше писать собственные решения.

Практические советы по работе с датами публикаций

При изменении даты публикации важно учитывать:

  • Сохраняйте резервные копии базы перед массовыми изменениями.
  • Обновляйте также дату GMT (post_date_gmt), чтобы избежать проблем с часовыми поясами.
  • Если сайт кэшируется, очищайте кэш после изменений, чтобы увидеть результат.
  • Проверяйте права пользователя, если добавляете интерфейс для изменения даты, чтобы избежать нежелательных изменений.

Пример функции для интерфейса изменения даты через AJAX

Быстрая демонстрация, как изменить дату записи через AJAX-запрос:

add_action('wp_ajax_wporg_update_post_date', function() {
    if (!current_user_can('edit_posts') || !isset($_POST['post_id'], $_POST['new_date'])) {
        wp_send_json_error('Недостаточно прав или некорректные данные');
    }

    $post_id = intval($_POST['post_id']);
    $new_date = sanitize_text_field($_POST['new_date']);

    wporg_change_post_date($post_id, $new_date);

    wp_send_json_success('Дата обновлена');
});

Далее на фронтенде можно отправлять запрос с помощью JavaScript и обновлять даты без перезагрузки.

Скачать WP с оф. сайта Магазин проверенных платных тем