Гид по технологиям

Как быстро удалить «корзину» WordPress через MySQL

• 4 min read • WordPress • Обновлено 22 Nov 2025
Очистка корзины WordPress через MySQL
Очистка корзины WordPress через MySQL

Логотип WordPress в тёмном режиме

Проблема

После массового удаления старых записей через админку WordPress процесс «Очистить корзину» часто зависает и таймаутится. Это особенно заметно, когда удаляется сотни или тысячи записей — интерфейс не успевает обработать поток запросов, и операция прерывается.

Когда стоит использовать MySQL напрямую

  • У вас тысячи удалённых записей, и админка не успевает их очистить.
  • Вы администратор или разработчик с доступом к базе данных и умением выполнять SQL.
  • Есть полный бэкап сайта и базы данных, проверенная тестовая среда.

Важно: любые прямые изменения в базе данных без бэкапа могут привести к необратимым потерям. Сделайте полный бэкап файлов и базы данных перед выполнением любых команд.

Быстрое решение: команда для подключения к MySQL

Откройте терминал и подключитесь к базе, используя значения из wp-config.php:

mysql -uUser -pPassword database

Замените User, Password и database на реальные значения из файла конфигурации. Если пароля нет, используйте только -uUser и затем введите пароль вручную.

Полный SQL-запрос для очистки корзины

Выполните следующий запрос в консоли MySQL. Он удалит не только записи в wp_posts со статусом trash, но и связанные метаданные и привязки к таксономиям:

DELETE wp_posts,wp_term_relationships,wp_postmeta,wp_term_taxonomy
FROM wp_posts
LEFT JOIN wp_term_relationships ON ( wp_posts.ID = wp_term_relationships.object_id )
LEFT JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )
LEFT JOIN wp_term_taxonomy ON ( wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id )
WHERE wp_posts.post_status='trash';

Что делает этот запрос

  • Удаляет строки из wp_posts, у которых post_status = ‘trash’.
  • Одновременно удаляет строки из wp_postmeta, wp_term_relationships и wp_term_taxonomy, связанные с этими постами, чтобы не оставлять «мусор» в базе.

Почему нельзя просто удалить из wp_posts

Можно выполнить простую команду:

DELETE FROM wp_posts WHERE post_status='trash';

Однако это оставит привязанные метаданные и записи о таксономиях, что со временем займёт значительный объём и может исказить отчёты или ломать связи в базе.

Пошаговая инструкция для безопасного выполнения

  1. Сделайте полный бэкап файлов сайта (FTP/SSH) и дамп базы данных (mysqldump или средство хостинга).
  2. Восстановите бэкап на локальной или тестовой среде.
  3. Подключитесь к тестовой базе: mysql -uUser -pPassword database.
  4. Запустите SELECT-запрос для проверки количества постов «в корзине»:
    SELECT COUNT(*) FROM wp_posts WHERE post_status='trash';
  5. На тесте выполните DELETE-запрос, приведённый выше.
  6. Проверьте логику сайта и индексы, убедитесь, что ничего критичного не пропало.
  7. Если всё в порядке, повторите операцию на продакшн-базе в окне с минимальной нагрузкой.

Альтернативные подходы

  • Использовать WP-CLI: команда wp post delete $(wp post list –post_status=trash –format=ids) –force удалит записи из WP с учётом API платформы. Это безопаснее для структурных данных и триггеров WordPress.
  • Плагин для массовой очистки: подходит, если вы доверяете плагину и он оптимизирован для больших объёмов данных.
  • Пошаговое удаление через SQL с лимитами: DELETE … LIMIT 1000 и цикл для избежания долгих транзакций.

Когда этот метод не подойдёт

  • Вы не уверены в корректности связей в базе (кастомные таблицы или плагины могут хранить зависимости в других таблицах).
  • На сайте применены сложные кастомные связи, которые не покрываются перечисленными таблицами.
  • Отсутствует бэкап или тестовая среда.

Меры предосторожности и откат

  • Бэкап обязателен. Без дампа базы откат невозможен.
  • Тестируйте на копии.
  • После удаления проверьте: главную страницу, страницы постов, пагинацию, функциональность плагинов, карту сайта и бэкенд.
  • Для отката восстановите дамп базы и файлы.

Роль-based чеклист перед выполнением

  • Администратор: подтвердить наличие бэкапа и окна обслуживания.
  • Разработчик: прогнать скрипт на тесте, подготовить скрипт восстановления.
  • Оператор/DevOps: выполнить дамп базы и обеспечить доступ к консоли MySQL.

Критерии приёмки

  • Количество записей со статусом ‘trash’ стало 0 или соответствует ожидаемому уменьшению.
  • Нет ошибок в логах сайта после операции.
  • Функционал сайта не нарушен (набор основных проверок пройден).

Контрольные тесты после удаления

  • SELECT COUNT(*) FROM wp_posts WHERE post_status=’trash’; должен вернуть 0.
  • Проверить наличие orphan-метаданных: SELECT COUNT(*) FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);

Короткое резюме

Удаление «корзины» через MySQL — быстрый и действенный способ для больших объёмов данных, но он требует строгого соблюдения мер предосторожности: бэкапа, тестирования на копии и проверки последствий на проде. Альтернатива — WP-CLI или пошаговые удаления с лимитом.

Итого: создайте бэкап, протестируйте, выполните запрос, проверьте сайт.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро