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

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

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

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

Итак, в этом посту мы рассмотрим все варианты (через админку, через 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 )

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

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 14

  • Илья2 января 2015 в 14:01 #

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

  • Екатерина22 января 2015 в 20:01 #

    Добрый вечер. У меня проблема такая. Я удалила все страницы из консоля кроме главной. Но страницы на сайте никуда не пропали. Что делать ума не приложу...

  • Женя30 мая 2015 в 08:05 #

    Вопрос - можно ли как-то включить автоматическое удаление всех записей и комментариев со всего блога вордпресс? желательно чтобы это происходило в автоматическом режиме, например через cron?

    • Миша30 мая 2015 в 09:05 #

      То есть вы хотите старые записи удалять или как?

      • Женя30 мая 2015 в 17:05 #

        да, полностью все записи, все комментарии чтобы блог стал пустой. раньше делал подобное с помощью подключения через php к базе данных и выполнения некоторых действий - хотелось бы получить подобный скрипт в этой записи!!!

        • Миша30 мая 2015 в 23:05 #

          Практически в самом верху поста приведен пример по удалению всех постов через функцию wp_delete_post().

          В качестве параметра post_type указываем значение any — в результате получаем блог без записей/страниц и комментов.

          Функцию потом можно на WP_Cron повесить, да.

  • Руслан19 сентября 2015 в 07:09 #

    Последовали вашему примеру "удаление всех записей какой-то конкретной рубрики" вторым способом, через SQL-запрос. Но происходит удаление не только записей, а ещё и рубрик в которых лежат записи

    Пример:
    Авто - рубрика ( 113 - id )
    Новое авто 2015 года - это запись

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

    • Миша20 сентября 2015 в 08:09 #

      По идее не должен, у вас рубрики и из админки и базы тоже пропадают? или только с сайта?

      • Руслан20 сентября 2015 в 08:09 #

        Из админки проподают я таже пробовал создать дургую рубрику под названием "qwerty" и потом в нее тестовую новость под названием "qwerty1" и id рубрики новый рубрики допустим 114 я ее писал затем зашел в PhpMyAdmin во вкладку SQL затем вставил код и поменял id и у меня удалилась и запись и рубрика пожалуйста я так долго ждал вашего ответа помогите мне...

  • Артем19 апреля 2016 в 12:04 #

    Михаил привет! Подскажи как написать sql запрос на удаление всех записей, КРОМЕ записей в определенных рубриках?

    • Миша19 апреля 2016 в 16:04 #

      Привет!

      Ну вот в этом примере удаляются все записи, кроме рубрик с ID 15 и 17

      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 != 15 AND tb2.term_taxonomy_id != 17

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.