При работе с WordPress удалённые записи (помеченные как «Удалённые» или перемещённые в корзину) продолжают занимать место в базе данных до тех пор, пока корзина не будет очищена. Однако иногда стандартных методов оказывается недостаточно, например, когда в базе много записей в состоянии "корзина" или когда удалённые записи не удаляются автоматически из-за ошибок. В этой статье подробно рассмотрим, как эффективно удалить удалённые записи из базы данных WordPress программными методами и с помощью плагинов.
Почему важно удалять удалённые записи из базы данных WordPress
Удалённые записи, хранящиеся в базе, занимают ресурсы и могут замедлять работу сайта, особенно если их много. Они увеличивают размер таблиц wp_posts и связанных таблиц, что влияет на производительность запросов, резервного копирования и восстановления.
Регулярная очистка корзины и удалённых записей помогает поддерживать базу данных в оптимальном состоянии и предотвращает накопление мусора. Особенно это актуально для крупных проектов с большим количеством контента.
Удаление удалённых записей стандартными средствами WordPress
В административной панели WordPress удалённые записи попадают в вкладку "Корзина". Там записи находятся до 30 дней, после чего удаляются автоматически. Для принудительного удаления можно очистить корзину вручную.
Однако при большом объёме записей или при ошибках очистка корзины может не сработать полностью. В таких случаях поможет программный подход.
Удаление удалённых записей WordPress через SQL-запросы
Можно напрямую очистить корзину из базы данных с помощью SQL-запросов. В базе WordPress удалённые записи имеют статус post_status = 'trash'. Чтобы удалить их окончательно, используйте следующий запрос:
DELETE p, pm FROM wp_posts p
LEFT JOIN wp_postmeta pm ON pm.post_id = p.ID
WHERE p.post_status = 'trash';
Этот запрос удалит все записи со статусом 'trash' и связанные с ними метаданные.
Перед выполнением обязательно сделайте резервную копию базы данных, чтобы избежать потери данных.
Удаление удалённых записей с помощью PHP-кода в WordPress (функции WPLab)
Для автоматизации процесса удаления удалённых записей можно использовать пользовательскую функцию. Приведём пример функции wplab_delete_trashed_posts(), которую можно добавить в файл functions.php вашей темы или создать отдельный плагин.
function wplab_delete_trashed_posts() {
global $wpdb;
// Получаем ID всех удалённых записей
$trashed_ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_status = 'trash'");
if (empty($trashed_ids)) {
return 'Удалённых записей не найдено';
}
foreach ($trashed_ids as $post_id) {
// Используем встроенную функцию WP для полного удаления записи
wp_delete_post($post_id, true);
}
return count($trashed_ids) . ' удалённых записей успешно удалены.';
}
Вызов этой функции удалит все записи из корзины полностью. Можно запускать её вручную или через wp-cron для регулярной очистки.
Пример использования функции через WP-CLI
Если на сервере установлен WP-CLI, можно создать кастомную команду для очистки корзины:
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wplab-clear-trash', function() {
$result = wplab_delete_trashed_posts();
WP_CLI::success($result);
});
}
Запуск команды:
wp wplab-clear-trash
Использование плагинов для удаления удалённых записей
Если вы предпочитаете готовые решения, можно использовать плагины, которые позволяют очищать корзину и оптимизировать базу данных:
- WP-Optimize — мощный плагин для очистки и оптимизации базы, поддерживает удаление записей из корзины.
- Advanced Database Cleaner — позволяет удалять удалённые записи, ревизии, спам и другие ненужные данные.
- Clearfy Pro — плагин от WPSHOP с расширенными возможностями оптимизации сайта и базы данных, включая очистку мусора.
Все эти плагины доступны на WPSHOP.ru и позволяют удобно управлять удалёнными записями без необходимости писать код.
Рекомендации по безопасности и производительности
Важно перед удалением делать резервную копию базы данных, особенно если вы используете SQL-запросы напрямую или автоматизацию через код. Ошибки могут привести к потере важных данных.
При большом объёме удалённых записей рекомендуется удалять их по частям, чтобы не перегрузить сервер. Также можно настроить автоматическую очистку корзины с помощью wp-cron, вызвав функцию wplab_delete_trashed_posts() по расписанию.
Заключение
Удаление удалённых записей WordPress из базы данных — важная задача для поддержания производительности и чистоты сайта. В статье вы нашли несколько способов решения: от штатных методов в панели, через SQL-запросы и PHP-код с функцией WPLab, до использования популярных плагинов. Выбирайте подходящий способ в зависимости от ваших навыков и объёма данных.