Бесплатный курс по натяжке вёрстки на WordPress на моём YouTube канале!

Как удалить все записи, страницы, комментарии на блоге

Иногда бывает нужно очистить блог от контента, причин на самом деле может быть много:

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

Эти несколько причин — первое, что пришло мне на ум.

Итак, в этом посту мы рассмотрим все варианты (через админку, через phpMyAdmin, через код) удаления записей, страниц и комментариев на сайте.

Как удалить все посты (записи)?

Расмотрим три способа удаления постов.

Через админку

Самый простой способ, но может не работать, если в вашей теме или в плагинах слишком много навешано на фильтр delete_post.

  1. Переходим в админке Записи > Все записи.
  2. Затем в правой верхней части экрана нужно открыть вкладку «Настройки экрана» и установить количество отображаемых записей больше или равным числу всех ваших записей. Жмём «Применить».
    как отобразить все записи в админке на одной странице
  3. Отмечаем чекбокс в шапке таблицы, тем самым выбираем все записи на странице.
  4. Из выпадающего списка действий выбираем «Удалить», затем жмём кнопку «Применить».
    удаляем все посты на блоге

Записи будут перенесены в корзину и через некоторое время удалятся автоматически. Но вы конечно можете сами перейти в корзину и одним кликом удалить их вручную.

Через phpMyAdmin

Если у вас возникли проблемы с удалением постов в админке, давайте залезем в базу данных MySQL и попробуем выковырять их оттуда.

Прежде, чем запускать какой-либо из представленных здесь SQL-запросов, делайте резервные копии! А также убедитесь, что префикс таблиц в запросах соответствует префиксу в вашей базе данных (если не уверены, подставьте стандартный — wp_, хуже от этого не будет, если только вашу базу данных не используют несколько сайтов на WordPress).

Итак, открываем phpMyAdmin, затем выбираем базу данных, использующуюся на сайте, переходим на вкладку SQL и вставляем туда следующее:

1
2
3
4
DELETE tb1,tb2
FROM {префикс}posts tb1
LEFT JOIN {префикс}postmeta tb2 ON ( tb1.ID = tb2.post_id )
WHERE tb1.post_type = 'post'
Удаляем посты через phpMyAdmin

Жмём «ОК», чтобы выполнить запрос.

Удаление постов через код при помощи 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();

Как работать с этим кодом?

  1. Вставляем код в файл functions.php (вы найдёте его в папке с темой).
  2. Обновляем любую страницу сайта, либо переходим в админку, чтобы убедиться, что записи удалены.
  3. Теперь удаляем код из файла (это можно сделать кстати, нажав комбинацию отмены Ctrl + Z для Windows или Cmd + Z для Мака).

Можно ли удалить все записи из какой-то конкретной рубрики?

Да конечно можно. Делается всё почти точно так же, как описано выше, только с небольшими изменениями.

  1. В первом способе, сразу после того, как мы вывели все записи на одной странице, нам нужно будет воспользоваться фильтром по рубрикам и только потом удалять все записи.
    фильтр записей по рубрикам
  2. Во втором способе просто немного изменится SQL-запрос. В новом запросе вам нужно будет указать ID рубрики, записи из которой хотите удалить.
    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
  3. В третьем способе нам тоже потребуется знать ID категории, его нужно будет добавить к массиву параметров WP_Query.
    $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 )

Если у вас возникли какие-либо вопросы, пожалуйста, задайте их в комментариях.

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году. С 2014 года меня можно встретить на WordCamp — официальной конфе по WordPress, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills.

Если вам нужна помощь с вашим сайтом или разработка с нуля, то могу порекомендовать хороших ребят. Просто напишите мне.