Иногда возникает необходимость массово или выборочно изменить дату публикации записей в 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 и обновлять даты без перезагрузки.