В процессе работы с WordPress накапливается большое количество записей, которые со временем могут стать неактуальными или устаревшими. Ручное удаление таких записей — трудоемкий процесс, особенно если контент регулярно обновляется. В этой статье мы разберем, как автоматизировать удаление старых записей в WordPress с помощью кастомного кода и плагинов, а также расскажем об особенностях и подводных камнях такого подхода.
Почему важно автоматизировать удаление старых записей
Поддержание базы данных в актуальном состоянии — залог быстрой работы сайта и удобства для пользователей. Старые записи могут негативно влиять на производительность, усложнять навигацию и снижать качество контента. Автоматизация удаления позволяет:
- Экономить время на ручной очистке базы данных.
- Поддерживать актуальность контента.
- Улучшать SEO-за счет удаления нерелевантных страниц.
- Сокращать размер базы данных для повышения скорости сайта.
При этом важно настроить автоматизацию так, чтобы не удалять полезный контент и иметь возможность восстановить данные при необходимости.
Автоматическое удаление устаревших записей с помощью кода
Самый гибкий способ — создать функцию, которая будет запускаться по расписанию и удалять записи старше определенного периода. Ниже пример функции wptour_delete_old_posts(), которая удаляет публикации старше 180 дней.
function wptour_delete_old_posts() {
global $wpdb;
$days = 180; // количество дней
$date = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));
// Получаем ID записей старше $days дней
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date < %s",
$date
));
if (!empty($old_posts)) {
foreach ($old_posts as $post_id) {
wp_trash_post($post_id); // отправляем в корзину
}
}
}
// Регистрируем событие в WP-Cron
if (!wp_next_scheduled('wptour_daily_delete_old_posts')) {
wp_schedule_event(time(), 'daily', 'wptour_daily_delete_old_posts');
}
add_action('wptour_daily_delete_old_posts', 'wptour_delete_old_posts');Эта функция выполняется ежедневно и перемещает старые записи в корзину. Вы можете изменить период и тип записей по своему усмотрению. Важно использовать wp_trash_post(), а не wp_delete_post(), чтобы иметь возможность восстановить записи из корзины, если понадобится.
Как разместить код в теме или плагине
Код рекомендуется добавить либо в файл functions.php вашей дочерней темы, либо создать небольшой плагин. Для создания плагина создайте файл wptour-auto-delete.php с заголовком:
<?php
/**
* Plugin Name: WPTOUR Auto Delete Old Posts
* Description: Автоматическое удаление старых записей
* Version: 1.0
* Author: WPTOUR
*/
// Вставьте сюда функцию и регистрацию CronИспользование плагинов для автоматического удаления старых записей
Если вы не хотите писать код, можно использовать готовые решения. Вот несколько популярных плагинов с похожей функциональностью:
- Auto Post Delete — позволяет задать период старения записей и автоматически удаляет их. Прост в настройке, но ограничен по функционалу.
- WP Bulk Delete — мощный плагин для массового удаления записей по различным критериям: дата, статус, таксономии и т.п. Поддерживает автоматический режим через WP-Cron.
- Advanced Post Cleaner — позволяет удалять черновики, мусор, устаревшие записи и другие типы контента с гибкими настройками.
При выборе плагина обратите внимание на совместимость с вашей версией WordPress и отзывы пользователей. Для автоматического запуска задач плагин использует WP-Cron, который по умолчанию зависит от посещений сайта. Для надежности можно настроить системный cron на сервере.
Как безопасно настроить удаление и избежать потери важных данных
Удаление записей — серьезная операция, поэтому нужно соблюдать меры предосторожности:
- Резервное копирование — перед автоматизацией сделайте полную резервную копию базы данных.
- Используйте корзину — как в примере выше, лучше сначала помещать записи в корзину, чтобы можно было восстановить.
- Организуйте аудит — ведите лог удалений, чтобы понимать, что было удалено и когда.
- Тестируйте на локальном или тестовом сервере — проверьте работу автоматизации, чтобы избежать сбоев на рабочем сайте.
Дополнительные возможности автоматизации с помощью WP-CLI
WP-CLI предоставляет мощный интерфейс командной строки для управления WordPress. Можно написать кастомную команду для удаления старых записей, запускать её вручную или по расписанию через системный cron.
wp wptour delete-old-posts --days=180Для этого создайте WP-CLI команду в вашем плагине:
if (defined('WP_CLI') && WP_CLI) {
class WPTOUR_Delete_Old_Posts_Command {
public function __invoke($args, $assoc_args) {
$days = isset($assoc_args['days']) ? intval($assoc_args['days']) : 180;
$date = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));
$old_posts = get_posts([
'date_query' => [
'before' => $date,
],
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => -1
]);
foreach ($old_posts as $post) {
wp_trash_post($post->ID);
WP_CLI::log("Moved post ID {$post->ID} to trash.");
}
WP_CLI::success("Old posts trashed successfully.");
}
}
WP_CLI::add_command('wptour delete-old-posts', 'WPTOUR_Delete_Old_Posts_Command');
}Это расширит возможности по управлению сайтом и позволит интегрировать удаление в автоматические процессы сервера.
Заключение
Автоматизация удаления старых записей в WordPress — важная задача для поддержания сайта в оптимальном состоянии. Использование WP-Cron с кастомными функциями или проверенными плагинами помогает экономить время и поддерживать порядок в базе данных. Не забывайте про безопасность: делайте резервные копии, используйте корзину и тщательно тестируйте решения.
Если хотите расширить функционал сайта, обратите внимание на плагины из WPShop.ru — например, плагин Clearfy Pro помогает оптимизировать работу сайта и может дополнительно облегчить управление контентом.