Иногда бывает нужно очистить блог от контента, причин на самом деле может быть много:
Эти несколько причин — первое, что пришло мне на ум.
Итак, в этом посту мы рассмотрим все варианты (через админку, через phpMyAdmin, через код) удаления записей, страниц и комментариев на сайте.
Расмотрим три способа удаления постов.
Самый простой способ, но может не работать, если в вашей теме или в плагинах слишком много навешано на фильтр delete_post
.
Записи будут перенесены в корзину и через некоторое время удалятся автоматически. Но вы конечно можете сами перейти в корзину и одним кликом удалить их вручную.
Если у вас возникли проблемы с удалением постов в админке, давайте залезем в базу данных 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_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
(вы найдёте его в папке с темой).Да конечно можно. Делается всё почти точно так же, как описано выше, только с небольшими изменениями.
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 )
Если у вас возникли какие-либо вопросы, пожалуйста, задайте их в комментариях.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Осторожно, если вы удаляете первым способом через админку и открыто много вкладок браузера или слабый компьютер, да ещё на старой ОС или устаревшей версии браузера, велик риск что повиснет, и возможно без жёсткой перезагрузки вы уже ничего не поделаете!
Добрый вечер. У меня проблема такая. Я удалила все страницы из консоля кроме главной. Но страницы на сайте никуда не пропали. Что делать ума не приложу...
Добрый день!
Вы чистили кэш?
Вопрос - можно ли как-то включить автоматическое удаление всех записей и комментариев со всего блога вордпресс? желательно чтобы это происходило в автоматическом режиме, например через cron?
То есть вы хотите старые записи удалять или как?
да, полностью все записи, все комментарии чтобы блог стал пустой. раньше делал подобное с помощью подключения через php к базе данных и выполнения некоторых действий - хотелось бы получить подобный скрипт в этой записи!!!
Практически в самом верху поста приведен пример по удалению всех постов через функцию
wp_delete_post()
.В качестве параметра
post_type
указываем значениеany
— в результате получаем блог без записей/страниц и комментов.Функцию потом можно на WP_Cron повесить, да.
Последовали вашему примеру "удаление всех записей какой-то конкретной рубрики" вторым способом, через SQL-запрос. Но происходит удаление не только записей, а ещё и рубрик в которых лежат записи
Пример:
Авто - рубрика ( 113 - id )
Новое авто 2015 года - это запись
так вот он удаляет и рубрику авто и запись внутри нее
не могли бы вы мне помочь решить данную проблему?
По идее не должен, у вас рубрики и из админки и базы тоже пропадают? или только с сайта?
Из админки проподают я таже пробовал создать дургую рубрику под названием "qwerty" и потом в нее тестовую новость под названием "qwerty1" и id рубрики новый рубрики допустим 114 я ее писал затем зашел в PhpMyAdmin во вкладку SQL затем вставил код и поменял id и у меня удалилась и запись и рубрика пожалуйста я так долго ждал вашего ответа помогите мне...
Пришлите мне тогда доступы в вк, я посмотрю.
Михаил привет! Подскажи как написать sql запрос на удаление всех записей, КРОМЕ записей в определенных рубриках?
Привет!
Ну вот в этом примере удаляются все записи, кроме рубрик с ID 15 и 17
То, что нужно! Спасибо!