Czasami zachodzi potrzeba „ręcznego” kasowania postów z WordPress’a, jako że system ten działa na MySQL MyISAM to nie wspiera kaskadowego kasowania zależnych danych.
Skasowanie postów jest stosunkowo proste:
DELETE FROM wp_posts WHERE conditions;
Trudniejsza sprawa jest ze skasowaniem tagów. Na necie znalazłem poniższe zapytanie, działa wyśmielicie:
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 );
Czasami jednak pole „count” w relacji „wp_term_taxonomy” zawiera niepoprawne dane (liczbę większą od 0), wtedy nieużywane tagi musimy zidentyfikować poprzez LEFT JOINa z warunkiem ID IS NULL. Poniżej zapytanie wyświetlające nieużywane tagi.
SELECT DISTINCT wp_terms.slug FROM wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id INNER JOIN wp_term_relationships wtr ON wtr.term_taxonomy_id=wtt.term_taxonomy_id LEFT JOIN wp_posts wp ON wp.ID=wtr.object_id WHERE taxonomy='post_tag' AND ID IS NULL AND NOT EXISTS(SELECT * FROM wp_terms wt2 INNER JOIN wp_term_taxonomy wtt2 ON wt2.term_id=wtt2.term_id WHERE wtt2.parent=wt.term_id) ORDER BY name
bardzo przydatne zapytanie na usuwanie nieużywanych tagów. Miałem na blogu ponad 50 tysięcy tagów! Poradziłem sobie w 4 sekundy z nimi. Przez skrypt WP siedziałbym chyba godzinami.
W związku z tym, że prefix tabel mam zupełnie inny w wordpress potrzebnych było troszkę więcej zmian w tym ostatnim zapytaniu na wyświetlenie, ale pominąłem je sobie.
Moja ocena wpisu 5/5, polecam i pozdrawiam.
A jakbym chciał to w MyAdmin zrobić?