Удаление записей WordPress - задача далеко не тривиальная. Речь не о том, чтобы удалить какую-то конкретную запись - тут всё просто. Но если надо удалить их все? Даже не десять и не двадцать, а несколько тысяч!
Кто-то может сказать: Дяденька, ты дурак? Это фраза из какого-то старого фильма. И ведь на самом деле, ведёт человек блог, трудится над созданием каждой записи-статьи, вкладывается в их продвижение и вдруг на тебе, массовое удаление записей WordPress ...
Но ситуации могут быть разные. С одной из таких ситуаций я буквально вчера и столкнулся.
Зачем мне понадобилось массовое
удаление записей WordPress
Приведу свою ситуацию в качестве примера. Есть корпоративный интернет-магазин, созданный на движке WordPress при помощи woocommerce. База этого магазина была небольшой, всего несколько сот товаров, отобранных по особому критерию из нашего ассортимента.
При таком положении дел обновление базы магазина происходило штатными средствами woocommerce - загружался небольшой CSV-файлик и через несколько минут обновление было завершено. Это устраивало.
Более того, возможности такого магазина мне понравились больше, чем наших-же интернет-магазинов на движке OpenCart. И возникла у меня идея все их перевести на WordPress. И вот тут-то я и нарвался на засаду: загрузка более 6000 товарных позиций штатными средствами занимала несколько часов. Два, три, иногда четыре...
Я стал искать сторонние плагины, разработчики которых обещали быструю загрузку до 100000 товаров... Ну да, как-же...
Тем не менее, один более-менее подходящий плагин я нашёл. По своей невнимательности в его настройках я выставил обновление не карточки товара, а записей. Уже вечером, уходя с работы, запустил импорт из CSV, а приехав домой, увидел, что товаров не прибавилось, зато было создано более шести тысяч новых записей. Вот их мне и пришлось удалять.
Как не надо удалять записи из WordPress
Поначалу я попытался удалить эти записи обычным способом через админку. Выделял по 200 штук и удалял. Попытка удалять сразу по тысяче приводила к ошибке тайм-аута сервера.
Кроме того, все эти записи удалялись в корзину и через какое то время я получил другую ошибку - размер корзины превысил некую допустимую величину и процесс прерывался.
Вот и пришлось, мало того, что удалять по 200 записей, так ещё после каждого такого удаления заходить в корзину и чистить её. Время действия растягивалось до необозримых пределов.
Пришлось искать другой путь решения проблемы.
Как удалить все записи WordPress меньше чем за минуту
Нужно массовое удаление записей WordPress? Есть решение, очень простое и быстрое. Создать SQL-запрос через phpMyAdmin. Что я и сделал.
DELETE tb1,tb2
FROM wp_posts tb1
LEFT JOIN wp_postmeta tb2 ON ( tb1.ID = tb2.post_id )
WHERE tb1.post_type = 'post'
Вот этот код! Его можно использовать на любом блоге WordPress, единственный момент, который надо учесть - это префикс таблиц. У меня это "wp_" (в коде это видно), у вас может быть точно такой, а может и отличаться. В таком случае просто в коде надо проставить свой префикс.
Куда этот код вставлять
Картинка увеличивается по клику на ней. Надеюсь, всё уже понятно, но на всякий случай опишу ещё словами...
Запускаем phpMyAdmin и слева выбираем свою базу данных, их ведь может быть несколько. А далее по схеме:
- Переходим на вкладку SQL.
- Вставляем код.
- Кликаем по кнопке "Вперёд".
Через несколько секунд(!) появится сообщение, что запрос обработан. На этом всё. Можете смотреть в своей админке - нет ни одной записи...
Как удалить все товары woocommerce
На всякий случай покажу, как точно таким-же способом удалить одним запросом все товары. Ну мало-ли, вдруг понадобиться. Лично я так уже несколько раз удалял...
DELETE FROM wp_term_relationships WHERE object_id IN (SELECT ID FROM wp_posts WHERE post_type = 'product');
DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM wp_posts WHERE post_type = 'product');
DELETE FROM wp_posts WHERE post_type = 'product';
Ещё раз хочу обратить внимание на префикс таблиц. Сам код вставляем как в предыдущем примере.
Вот, собственно и всё...
Заключение
Ещё существуют специальные плагины для тех действий, о которых я тут рассказал. Но, на мой взгляд, это несерьёзно. Они, при таком массовом удалении записей, выдают те-же ошибки, что я обозначил при удалении из админки... Смысл?
Очень надеюсь, что вам этот материал не пригодится. Ну, а если вдруг возникнет ситуация, подобная моей, или аналогичная - то вот оно решение. Быстрое и чистое.
Тем не менее, не стоит забывать о резервных копиях... На всякий случай. А также про оптимизацию базы данных. Это важно!
Удачи вам и до встречи на наших блогах!
Саша, привет! Отличная статья, взяла в закладки…. все может быть и дай Бог, чтоб не пригодилось.
Я пришла поздравить тебя и всю твою семью со Светлой Пасхой! Здоровья тебе, всех благ тебе и твоей семье, а главное крепкого сибирского здоровья. Оставайся здравым Полковником!
С Искренним Уважением и теплотой я
Пусть теплоты, добра, уюта
Вам день пасхальный принесёт.
И душу пусть покинет смута,
А от беды Вас Бог спасёт.
Сегодня Вы поверьте в сказку —
Случилось чудо из чудес,
Ведь в этот день, благой и ясный,
Как светлый лик Христос Воскрес!
Надя, спасибо за поздравление! И тебя с этим светлым праздником!
Стихи красивые…
И у меня Саша к тебе один малюсенький вопрос, который хотела так давно задать. Вот например: нажимаю на Светлой Пасхой (в своем комменте) и появляется или выползает… картинка с описанием. Это у тебя какой-то плагин стоит? Подскажи пожалуйста командир. Заранее спасибо!
Это делается легко, вот код:
Вставляется перед закрывающим тегом BODY, в моём шаблоне есть возможность такой вставки, поэтому никакие файлы я не правил.
А вот официальная документация от Яндекс.
Саша, огромущее Спасибо за ответ) Пока не полезу никуда, буду иметь в виду… на будуЮщее
Да ты хоть посмотри настройки своей темы – во всех современных шаблонах есть возможность вставить код. Там всё просто…
Саша, отправила тебе сообщение на маил. Посмотри как время у тебя будет лишнее.
Лишнего времени не бывает. Но там делов было ровно на 30 секунд… Уже всё работает у тебя…
Спасибо!!!!!!!!!!!!!!!! Остальное в почте!!!!!!!!! Пиво тоже в почте
Саша, привет! Классно что нашел способ как и что сделать. Хотя по другому быть и е могло.
Да, с праздником Пасхи!
Был-бы изначально внимательнее – не понадобилось бы ничего искать. Вот так, через пресловутые грабли и набираем опыт…
Саша, я тебе в обратную связь написала. Это несрочно….
Письмо получил, ответил…
Ответ получила, буду думать. Спасибо за обратную связь. Удачи!!!
Думаю, что мне такое не пригодится, но взяла на заметку. Саша, поздравляю с наступающими майскими праздниками, пусть они будут интересными и веселыми. Здоровья и успехов!
Таисия, если не пригодится, так это-же хорошо!
Саша, привет. Даа… какие только вопросы нам жизнь не подбрасывает и нужно их решить. Ты молодец!!! Я то, конечно, в предложенной схеме ничего не поняла, но статью прочла- нужно же отметиться, чтоб ты знал 🙂 Тем более ты так редко стал публиковать новое.
И кстати, не было рассылки. Первый случай за всё время нашего общения. Всё и всегда приходили. Что это? Не делал?
Люда, привет! Статья, на мой взгляд, слишком специфическая, так что рассылку по ней я не делал.
Исправлюсь буквально сегодня. И рассылку сделаю… Спасибо, что заглянула!
Классная статья, с интересом и удовольствием прочитала.
Спасибо, Елена! Неужели это и Вам пригодилось?
Да, будем надеяться, нам такая информация не потребуется, но вообще этот опыт с удалением записей наглядно показывает еще раз, что чаще всего все-таки не стоит возиться со всем вручную, потому что есть намного более эффективные способы достичь желаемого результата. Так что стоит только поискать и воспользоваться ими.