Удалить лишние метки WordPress

Возникло острое желание удалить метки (они же теги постов) Ворпресс, которые используются на сайте менее 3 раз. Делать это руками неблагодарное дело, особенно когда меток несколько тысяч (у меня их уже было более 7 тысяч), а нормального инструмента от разработчиков WordPress нет и, видимо, не будет никогда. И, что еще более смешно, сторонних плагинов под эти задачи также найти не удалось.

Пришлось писать SQL запрос, который чудесным образом справляется с поставленной задачей. Поскольку я в SQL не академик — то запрос несколько убогий:

DELETE a,b,c
FROM
wp_terms AS a
LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE (
c.taxonomy = 'post_tag' AND
c.count = 0
);

Константа в c.count указывает, сколько раз используется тег (метка), подходящая для удаления. 0 — это удаляются метки, которые вообще ни разу не используются (такое бывает, когда посты, использовавшие эту метку, были удалены).

Если вам нужно удалить метки, используемые до 3 раз включительно — придется прогнать запрос 4 раза, с константами 0, 1, 2 и 3. На самом деле так делать и правильнее, поскольку обычно непонятно, с каким уровнем использования теги стоит удалять — а запрос при каждом выполнении пишет, сколько строк ему удалось удалить, и можно остановиться, когда уже хватит.

У меня в базе было около 7800 тегов, после прогона 0, 1 и 2 их осталось около 1200, после прогона 3 осталось 690. Ну, столько уже нормально. Дальше имеет смысл посмотреть глазами в админке Вордпресса и удалить самые дурацкие метки руками.

Впрочем, для лентяев и тяжелых случаев есть и такой код:

DELETE a,b,c
FROM
wp_terms AS a
LEFT JOIN wp_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN wp_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE (
c.taxonomy = 'post_tag' AND
c.count < 20 );

Удаляются все метки, использованные меньше 20 раз.

Между прочим, когда меток много - это здорово тормозит вордпресс и нагружает базу. Причину вы без труда можете увидеть по вот этому запросу - все эти LEFT JOIN весьма ресурсоемки, а теперь представьте себе, сколько раз их приходится выполнить, чтобы построить облако из наиболее популярных меток.

Настоящий материал самостоятельно опубликован в нашем сообществе пользователем proper на основании действующей редакции Пользовательского Соглашения. Если вы считаете, что такая публикация нарушает ваши авторские и/или смежные права, вам необходимо сообщить об этом администрации сайта на EMAIL abuse@newru.org с указанием адреса (URL) страницы, содержащей спорный материал. Нарушение будет в кратчайшие сроки устранено, виновные наказаны.

You may also like...

Подписка
На почту
0 Комментарий
Встроенные Обратные Связи
Все комментарии