Zmiana nazw niestandardowych typów postów i taksonomii

31

Zacząłem tworzyć witrynę z kilkunastoma niestandardowymi typami postów. Chciałbym zmienić nazwę kilku z nich, nie tylko wyświetlaną wartość, ale rzeczywistą nazwę niestandardowego typu postu. Martwię się jednak, że uruchamiając zapytanie o aktualizację SQL, przegapię niektóre miejsca, w których muszę coś zmienić lub zastąpić część danych zserializowanych. Wprowadziłem już ponad 3000 elementów, więc nie mogę zrestartować się z czystą bazą danych.

Jaki byłby najlepszy sposób zmiany nazwy niestandardowego typu postu? Co powiesz na zmianę nazwy taksonomii?

Derek Perkins
źródło
Kolejne pytanie w tym samym duchu dotyczy niestandardowych reguł przepisywania .htaccess. Czy w mojej bazie danych pozostanie wiele resztek reguł? Witryna nie została jeszcze uruchomiona, więc nie muszę przekierowywać żadnych starych linków.
Derek Perkins

Odpowiedzi:

47

Zapytanie SQL o zmianę nazwy postów:

UPDATE  `wp_posts` SET  `post_type` =  '<new post type name>' WHERE  `post_type` = '<old post type name>';

Zapytanie SQL dotyczące zmiany nazwy taksonomii:

UPDATE  `wp_term_taxonomy` SET  `taxonomy` =  '<new taxonomy name>' WHERE  `taxonomy` = '<old taxonomy name>';

To powinno zająć się wszystkimi obszarami bazy danych. Pamiętaj tylko, aby dopasować nowe nazwy w kodzie, w którym zarejestrowane są typy postów lub taksonomie. O ile mi wiadomo, nie jest to jeszcze obsługiwane w żadnych wtyczkach.

John P. Bloch
źródło
9
Doskonała odpowiedź, dokładnie to, czego potrzebowałem. Oto wskazówka na wypadek, gdyby inni napotkali ten sam problem, co ja: po uruchomieniu zapytania i zaktualizowaniu kodu wszystko działało w zasadzie, ale kiedy próbowałem wejść na stronę pojedynczego elementu treści, wystąpił błąd 404. Myślę, że trzeba było zresetować pamięć podręczną permalink; Poszedłem do Narzędzia> Permalinks i kliknąłem Zapisz, a następnie zaczęły działać szczegółowe strony.
Andy Giesler,
Kiedy to zrobiłem, zaktualizowałem również pole GUID. Może to pomóc zrezygnować z ponownego generowania permalinków, jak wspomniano w @AndyGiesler. Wystarczy dołączyć do instrukcji UPDATE następujące: guid = REPLACE (guid, '<old post type name>', '<new post type name>')
rinogo
Aby dodać trochę więcej informacji do komentarza rinogo, jest to nieco bezpieczniejszy sposób na aktualizację GUID: UPDATE wp_posts SET guid = REPLACE (guid, 'post_type = <old post type name>', 'post_type = <new post type name > ');
David
tylko pamiętaj, że będziesz musiał obserwować nazwy swoich tabel podczas pracy na
wielu stronach
6

Cześć @Derek Perkins:

Ogólnie rzecz biorąc, odpowiedź Johna P. Blocha jest na miejscu, ale z zastrzeżeniem . Wtyczki, a nawet niestandardowe motywy mogą i mogą przechowywać informacje o typach postów, dlatego aby mieć pewność, że nie uszkodzisz swoich danych, musisz upewnić się, że wtyczki i motywy nie przechowują typów postów lub jeśli to zrobisz, zaktualizujesz ich dane także.

Czy możesz nam powiedzieć, jakich wtyczek używasz?

MikeSchinkel
źródło
Trafne spostrzeżenie. Tworzę niestandardowy motyw, więc na pewno będę musiał przejść i zmienić kod. Nie mam jednak żadnych wtyczek, które przechowują informacje o niestandardowym typie postu.
Derek Perkins,
To dobra uwaga. Korzystałem z zaawansowanych pól niestandardowych i dla każdej grupy pól dołączonej do tego postu musisz ręcznie zresetować go do nowej nazwy CPT. Potem jednak działa dobrze.
Chris Rae,
4

Jeśli nie chcesz samodzielnie wykonywać zapytań SQL, możesz użyć kilku wtyczek:

Z powodzeniem użyłem Konwertuj typy postów do masowej zmiany postów.

W przypadku konwersji poszczególnych postów lepszym rozwiązaniem jest przełącznik typu postu .

Adam Dempsey
źródło
Dziękujemy za opublikowanie tych linków. Sam dobrze sobie radzę z zapytaniami SQL, ale z pewnością przydadzą się innym, którzy napotkają ten post.
Derek Perkins,
to wydaje się konwertować typy postów, a nie zmieniać ich nazw
vladkras