Поиск по сайту:

Как очистить корзину WordPress с помощью запроса MySQL


На главной странице HTG мы работали над устранением проблем после необъяснимого падения трафика Google на 35%, и в рамках этого процесса мы удаляли старые сообщения, которые нам больше не нужны.

Проблема в том, что после того, как вы удалите сотни или тысячи сообщений в WordPress, практически невозможно очистить корзину с помощью интерфейса — это займет несколько минут, а затем истечет время без успешной очистки корзины.

К счастью, всегда есть лучший способ… и в данном случае это так же просто, как запустить скрипт базы данных. Вы можете запустить консоль MySQL, запустив эту команду из терминала, используя значения из вашего файла wp-config.php для подключения к базе данных.

mysql -uUser -pPassword database

Оказавшись там, вставьте следующее и пообещайте не злиться, если весь ваш сайт сломается. Может быть, у вас должна быть полная резервная копия вашего сайта, верно?

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, но и дополнительные метаданные из wp_postmeta, wp_term_relationships и wp_term_taxonomy — последние два предназначены для назначения категорий и тегов, а первый, очевидно, для метаданных о самом посте.

Часть оператора DELETE перечисляет таблицы, из которых мы хотим удалить данные, и MySQL удалит все записи в этих таблицах, которые соответствуют этому запросу. Так что, очевидно, если вы собираетесь настраивать эту технику, вы должны быть очень осторожны.

Конечно, вы можете удалить сообщения только с помощью delete from wp_posts, где post_status=trash, но это оставит всю мета, которая может содержать массу дополнительных данных.

Я настоятельно рекомендую сначала запустить этот скрипт на вашем локальном сайте разработки или QA, чтобы убедиться, что он делает то, что вы ожидаете. Вы же не станете запускать случайный SQL на производстве в середине дня, не так ли?