Почему важно автоматически очищать корзину WordPress
В WordPress при удалении записи или страницы она не исчезает мгновенно, а помещается в корзину. Это удобно, если нужно восстановить материал, но со временем корзина может «захламляться» устаревшими элементами. Особенно актуально это для сайтов с большим объемом контента — накопление данных в корзине может замедлять работу базы данных и увеличивать время резервного копирования.
По умолчанию WordPress удаляет записи из корзины через 30 дней, но часто этого времени недостаточно или наоборот слишком много. В этой статье мы разберем, как с помощью собственного кода автоматизировать удаление записей из корзины по вашим правилам, например, удалять записи старше 7 дней или очищать корзину ежедневно.
Рассмотрим как реализовать это с помощью хуков и cron задач WordPress, а также приведем примеры плагинов, которые могут помочь в задаче.
Как работает корзина (trash) в WordPress и почему записи там не удаляются сразу
Корзина — это специальный статус записи (post_status = 'trash'), который позволяет временно скрыть запись без физического удаления из базы. Записи в корзине не видны на сайте, но хранятся в базе данных.
Стандартно WordPress хранит записи в корзине 30 дней. По истечении этого срока включается процесс очистки, удаляющий устаревшие записи. Однако этот процесс запускается только при посещении сайта, и если трафик небольшой, корзина может не очищаться вовремя.
Если нужно изменить этот срок или добавить дополнительные условия очистки — придется вмешаться в работу WordPress программно.
Функция для удаления записей из корзины старше определенного срока
Создадим функцию, которая будет находить и удалять записи в корзине, которые были туда помещены более 7 дней назад. Для этого нам нужно:
- Получить из базы все записи со статусом
trash; - Проверить дату их последнего изменения (post_modified);
- Удалить те, у которых дата устарела.
Ниже пример кода, который можно добавить в файл functions.php вашей темы или в собственный плагин:
function wpmy_delete_old_trash_posts() {
$days_to_keep = 7; // количество дней хранения в корзине
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));
// Получаем записи со статусом trash, дата изменения старше порога
$args = array(
'post_status' => 'trash',
'date_query' => array(
array(
'column' => 'post_modified',
'before' => $date_threshold,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$old_trash_posts = get_posts($args);
if (!empty($old_trash_posts)) {
foreach ($old_trash_posts as $post_id) {
// Полное удаление записи из базы
wp_delete_post($post_id, true);
}
}
}Эта функция удалит все записи из корзины старше 7 дней. Параметр true в wp_delete_post означает физическое удаление, а не перемещение в корзину.
Настройка автоматического запуска: использование WP-Cron
Чтобы функция запускалась автоматически, нужно создать cron задачу WordPress, которая будет вызывать эту функцию с нужной периодичностью, например, раз в сутки.
Добавим в functions.php следующий код для регистрации события и обработки:
// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpmy_daily_trash_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpmy_daily_trash_cleanup');
}
// Хук на нашу кастомную задачу
add_action('wpmy_daily_trash_cleanup', 'wpmy_delete_old_trash_posts');
// Очистка при деактивации темы или плагина
function wpmy_deactivate_cleanup() {
wp_clear_scheduled_hook('wpmy_daily_trash_cleanup');
}
// Здесь нужно вызвать wpmy_deactivate_cleanup() при деактивации плагина или темы
Таким образом функция wpmy_delete_old_trash_posts будет вызываться каждый день и очищать корзину от старых записей.
Примеры плагинов для управления корзиной WordPress
Если хотите использовать готовые решения без программирования, обратите внимание на следующие плагины:
- WP Bulk Delete — позволяет удалять записи по различным параметрам, включая статус, дату и тип.
- Advanced Database Cleaner — умеет чистить базу, включая корзину, и оптимизировать таблицы.
- Trash Duplicate and 301 Redirect — помогает управлять дубликатами и корзиной.
Однако для тонкой настройки и интеграции с вашими задачами кодовый подход более гибкий.
Дополнительные советы и рекомендации при работе с корзиной
При автоматическом удалении записей из корзины важно учитывать:
- Не удаляйте записи, которые могут понадобиться для восстановления — настройте срок в зависимости от ваших бизнес-процессов.
- Проверьте совместимость с плагинами, которые могут использовать корзину для своих нужд.
- Тестируйте скрипты на тестовом сайте, чтобы избежать потери важных данных.
Также помните, что для крупных сайтов с очень большим количеством записей стоит задуматься о периодической оптимизации базы данных.