В очередной раз столкнулся с необходимостью удалить большое количество постов одной категории в WordPress. Но в этот раз к-во постов было огромным.
В базе данные поста хранятся в нескольких таблицах. Раньше делал такое в несколько запросов. В этот раз, с моим неторопливым интернетом, это было бы не слишком удобным.
Посмотрел что есть уже из готового, в плагинах. На сайте вордпресса для этого предлагают использовать Bulk Delete. ~25тыс постов он не осилил.
В общем получился вот такой SQL запрос, «wp_» нужно заменить на ваш префикс:
DELETE a,b,c,d
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
WHERE e.term_id = _category_id_
Удалено строк: 12450. ( запрос занял 36.5197 сек. )
Удалено строк: 51990. ( запрос занял 150.1790 сек. )
Стоит еще помнить о комментариях. К счастью, в моем случае их не было.
Заранее спасибо за ответ !!!