Иногда бывает нужно очистить блог от контента, причин на самом деле может быть много:
- удаление тестового контента,
- вы решили вести блог на одну тематику, но потом передумали и перешли на другую,
- возможно вы решили отказаться от системы комментирования и, чтобы не засорять базу, удалить все комментарии на сайте.
Эти несколько причин — первое, что пришло мне на ум.
Итак, в этом посту мы рассмотрим все варианты (через админку, через phpMyAdmin, через код) удаления записей, страниц и комментариев на сайте.
Как удалить все посты (записи)?
Расмотрим три способа удаления постов.
Через админку
Самый простой способ, но может не работать, если в вашей теме или в плагинах слишком много навешано на фильтр delete_post
.
- Переходим в админке Записи > Все записи.
- Затем в правой верхней части экрана нужно открыть вкладку «Настройки экрана» и установить количество отображаемых записей больше или равным числу всех ваших записей. Жмём «Применить».
- Отмечаем чекбокс в шапке таблицы, тем самым выбираем все записи на странице.
- Из выпадающего списка действий выбираем «Удалить», затем жмём кнопку «Применить».
Записи будут перенесены в корзину и через некоторое время удалятся автоматически. Но вы конечно можете сами перейти в корзину и одним кликом удалить их вручную.
Через 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' |
Жмём «ОК», чтобы выполнить запрос.
Удаление постов через код при помощи 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(); |
Как работать с этим кодом?
- Вставляем код в файл
functions.php
(вы найдёте его в папке с темой). - Обновляем любую страницу сайта, либо переходим в админку, чтобы убедиться, что записи удалены.
- Теперь удаляем код из файла (это можно сделать кстати, нажав комбинацию отмены Ctrl + Z для Windows или Cmd + Z для Мака).
Можно ли удалить все записи из какой-то конкретной рубрики?
Да конечно можно. Делается всё почти точно так же, как описано выше, только с небольшими изменениями.
- В первом способе, сразу после того, как мы вывели все записи на одной странице, нам нужно будет воспользоваться фильтром по рубрикам и только потом удалять все записи.
- Во втором способе просто немного изменится 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
- В третьем способе нам тоже потребуется знать 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 ) |
Если у вас возникли какие-либо вопросы, пожалуйста, задайте их в комментариях.
Источник: misha.blog