Иногда бывает нужно очистить блог от контента, причин на самом деле может быть много:
Эти несколько причин — первое, что пришло мне на ум.
Итак, в этом посту мы рассмотрим все варианты (через админку, через phpMyAdmin, через код) удаления записей, страниц и комментариев на сайте.
Как удалить все посты (записи)?
Расмотрим три способа удаления постов.
Через админку
Самый простой способ, но может не работать, если в вашей теме или в плагинах слишком много навешано на фильтр delete_post
.
Записи будут перенесены в корзину и через некоторое время удалятся автоматически. Но вы конечно можете сами перейти в корзину и одним кликом удалить их вручную.
Через phpMyAdmin
Если у вас возникли проблемы с удалением постов в админке, давайте залезем в базу данных MySQL и попробуем выковырять их оттуда.
Прежде, чем запускать какой-либо из представленных здесь SQL-запросов, делайте резервные копии! А также убедитесь, что префикс таблиц в запросах соответствует префиксу в вашей базе данных (если не уверены, подставьте стандартный — wp_
, хуже от этого не будет, если только вашу базу данных не используют несколько сайтов на WordPress).
Итак, открываем phpMyAdmin, затем выбираем базу данных, использующуюся на сайте, переходим на вкладку SQL и вставляем туда следующее:
DELETE tb1,tb2 FROM {префикс}posts tb1 LEFT JOIN {префикс}postmeta tb2 ON ( tb1.ID = tb2.post_id ) WHERE tb1.post_type = 'post'
Жмём «ОК», чтобы выполнить запрос.
Удаление постов через код при помощи WP_Query и wp_delete_post()
Для тех, кто хорошо знаком с WP_Query, возможно этот способ окажется даже более удобным чем два других, потому что с помощью параметров WP_Query вы можете очень точно указать, какие посты хотите удалить.
Функция же wp_delete_post() позволяет удалить пост, ID которого указан в параметре.
$params = array( 'posts_per_page' => -1, // все посты 'post_type' => 'post' // записи, этот параметр можно не указывать, так как post - стоит по умолчанию ); $q = new WP_Query( $params ); if( $q->have_posts() ) : // если посты по заданным параметрам найдены while( $q->have_posts() ) : $q->the_post(); wp_delete_post( $q->post->ID, true ); // второй параметр функции true означает, что пост будут удаляться, минуя корзину endwhile; endif; wp_reset_postdata();
Как работать с этим кодом?
Можно ли удалить все записи из какой-то конкретной рубрики?
Да конечно можно. Делается всё почти точно так же, как описано выше, только с небольшими изменениями.
DELETE tb1,tb2,tb3 FROM {префикс}posts tb1 LEFT JOIN {префикс}term_relationships tb2 ON ( tb1.ID = tb2.object_id ) LEFT JOIN {префикс}postmeta tb3 ON ( tb1.ID = tb3.post_id ) WHERE tb2.term_taxonomy_id = 16
$params = array( 'posts_per_page' => -1, // все записи 'post_type' => 'post', // записи, этот параметр можно не указывать, так как post - стоит по умолчанию 'cat' => 43 );
Как удалить все страницы
Удаление страниц в вордпресс не особо отличается от удаления записей, ведь по сути страницы — это те же посты, но другого типа (page
).
Избавиться от всех страниц на блоге вы сможете теми же самыми способами, описанными выше, но в каждом из способов будет одно небольшое изменение, давайте я вам покажу какое.
В первом способе вам надо будет перейти не в Записи > Все записи, а в Страницы > Все страницы (в принципе это должно быть очевидно).
Во втором способе изменится только четвёртая строчка SQL-запроса, т.е. сначала скопируйте описанный выше запрос, а затем замените его последнюю строку на:
WHERE tb1.post_type = 'page'
Если вы решите использовать третий способ для удаления страниц, тогда вам нужно будет использовать следующие параметры для WP_Query:
$params = array( 'posts_per_page' => -1, // все страницы 'post_type' => 'page' // страницы );
Удаляем комментарии на блоге
Теперь давайте посмотрим, как одним махом удалить все комментарии с сайта на WP. Здесь я рассмотрю два способа — через админку и через phpMyAdmin.
Если вам будет непонятен какой-либо из способов, вы можете почитать подробнее про каждый из них в начале статье (я всё подробно расписал, когда удалял записи на блоге).
Итак, первый способ. Переходим в админке в Комментарии, при помощи настроек экрана устанавливаем, чтобы все комментарии отображались на одной странице, затем массово выделяем их галочкой, из выпадающего меню выбираем «Удалить» и жмём кнопку «Применить».
Второй способ. Открываем в phpMyAdmin вкладку SQL для текущей базы данных на сайте и выполняем:
DELETE tb1,tb2 FROM {префикс}comments tb1 LEFT JOIN {префикс}commentmeta tb2 ON ( tb1.comment_ID = tb2.comment_id )
Если у вас возникли какие-либо вопросы, пожалуйста, задайте их в комментариях.