Durch das Löschen von Post-Tags werden Kategorien entfernt

Ich versuche, alte Post-Tags aus einigen WP-Installationen zu entfernen. In einigen Fällen habe ich über 20k Tags für ein paar tausend Posts. Ich habe den folgenden Code ausprobiert:

delete t.*,tt.*,tr.* FROM wp_terms AS t INNER JOIN wp_term_taxonomy as tt INNER JOIN wp_term_relationships as tr WHERE tt.term_id = t.term_id AND tr.term_taxonomy_id = tt.term_taxonomy_id AND tt.taxonomy = 'post_tag' AND tt.count < 5 

Dies soll alle Tags löschen, die für weniger als 5 Posts verwendet werden. Nachdem ich es ausgeführt habe, ist mir aufgefallen, dass auch eine Reihe von Kategorien gelöscht wurde (Taxonomie = ‘Kategorie’) und ich bin ratlos warum? Hat noch jemand es geschafft?

Solutions Collecting From Web of "Durch das Löschen von Post-Tags werden Kategorien entfernt"

Ich bin mir nicht sicher, aber so wie die Tabellen eingerichtet sind, kann WordPress den gleichen terms Record (mit der gleichen term_id ) innerhalb verschiedener Taxonomien term_id . Das heißt, wenn Sie ein post_tag favorites und Sie auch eine category namens favorites , kann es gut sein, dass WP den gleichen terms Datensatz für beide verwendet und nur über die Tabelle term_taxonomy_id diversifiziert. Das hat offensichtliche Vorteile.

Also … wenn Ihre obige Abfrage den Begriff als Teil der Abfrage findet und löscht, verschwindet sie auch, wenn sie auch als Kategorie verwendet wird, weil der Begriff Datensatz weg ist und die Beziehung nicht mehr gezeichnet werden kann.

Wie gesagt, ich habe nicht verifiziert, dass WP es tatsächlich so macht, aber es würde Ihr Phänomen erklären.

Die Lösung wäre, den Begriff nur zu löschen, wenn seine ID nur einmal in tt.term_id erscheint. Ich würde empfehlen, die Abfrage dafür aufzulösen.

Danke für den Tipp – hier ist, wie es gelandet ist und es scheint ein Vergnügen zu sein 🙂

 DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE taxonomy = 'post_tag' AND count < = 5) and term_id not in (SELECT term_id FROM wp_term_taxonomy WHERE taxonomy = 'category') DELETE FROM wp_term_relationships WHERE term_taxonomy_id IN (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE taxonomy = 'post_tag' AND count <= 5) and term_taxonomy_id not in (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE taxonomy = 'category') DELETE FROM wp_term_taxonomy WHERE taxonomy = 'post_tag' AND count <= 5