baza danych — wydajnie usuwaj wszystkie posty niestandardowego typu
![baza danych — wydajnie usuwaj wszystkie posty niestandardowego typu](https://oen.pl/wp-content/uploads/2023/01/apple-touch-icon@2.png)
WordPress Development Stack Exchange to strona z pytaniami i odpowiedziami dla programistów i administratorów WordPress. Rejestracja zajmuje tylko minutę.
Zarejestruj się, aby dołączyć do tej społeczności
Każdy może zadać pytanie
Każdy może odpowiedzieć
Najlepsze odpowiedzi są głosowane i wznoszą się na szczyt
Spytał
Oglądane38 tys. razy
Szukam bezpiecznego i szybkiego sposobu na usunięcie wszystkich postów jednego niestandardowego typu postów. Za pomocą get_posts()
I wp_delete_post()
za każdy zwrócony post nie działa; nie jest wystarczająco szybki ze względu na ogromną liczbę zapytań do bazy danych (błąd przekroczenia limitu czasu).
Najlepiej szukam pojedynczego zapytania do bazy danych do uruchomienia, które usuwa wszystkie posty, które są niestandardowego typu postu. jakieś pomysły?
9
Możesz usunąć wszystkie posty przez $wpdb
DELETE FROM wp_posts WHERE post_type="post_type";
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);
DELETE FROM wp_term_relationships WHERE object_id NOT IN (SELECT id FROM wp_posts)
lub użyj tego zapytania, zastąp je {{your CPT}} swoim niestandardowym typem postu
DELETE a,b,c
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)
WHERE a.post_type="{{your CPT}}";
3
Możesz usunąć wszystkie posty niestandardowego typu posta na różne sposoby, ale tutaj pokażę ci, jak to zrobić bez użycia zapytania SQL. Tutaj na przykład nasz typ postu to produkt
$allposts= get_posts( array('post_type'=>'product','numberposts'=>-1) );
foreach ($allposts as $eachpost) {
wp_delete_post( $eachpost->ID, true );
}
Zobacz pełny samouczek Odniesienie tutaj
3
Można to teraz zrobić za pomocą interfejsu CLI WordPress usunięcie wpisu wp. Po zainstalowaniu interfejsu CLI następujące polecenie terminala (w katalogu głównym witryny) usunie wszystkie wpisy typu mycustomtype
:
wp post delete $(wp post list --post_type="mycustomtype" --format=ids)
Brak surowego kodu SQL (*dreszcz*), bez martwienia się o limity czasu i jest szybki. Na przykład właśnie usunąłem ~ 2500 postów w mniej niż dwie minuty.
1
Jeśli poprzedziłeś swój typ postu CPT i swoje taksonomie CPT np. „abc_my_custom_post_type” i „abc_my_taxonomy”, to trywialne jest usunięcie wszystkiego z bazy danych za pomocą dwóch zapytań:
DELETE a,b
FROM $wpdb->posts a
LEFT JOIN $wpdb->postmeta b ON a.ID = b.post_id
WHERE a.post_type LIKE 'abc_%';
DELETE a,b,c
FROM $wpdb->term_taxonomy a
LEFT JOIN $wpdb->term_relationships b ON a.term_taxonomy_id = b.term_taxonomy_id
LEFT JOIN $wpdb->terms c ON a.term_id = c.term_id
WHERE a.taxonomy LIKE 'abc_%'
Orkan jest nowym współtwórcą tej witryny. Uważaj, prosząc o wyjaśnienia, komentując i odpowiadając. Sprawdź nasz Kodeks Postępowania.
domyślny