Jak zmodyfikować taksonomię, która jest już zarejestrowana

18

Dzisiaj musiałem zmienić argumenty dotyczące niestandardowej taksonomii, która została już zarejestrowana przez wtyczkę strony trzeciej . W szczególności chciałem ustawić show_admin_columnargument truei zmienić rewriteślimak, aby nie był to ślimak taksonomiczny. W tym przypadku był to typ postu „Ludzie” z niestandardową taksonomią „Kategoria osób”.

Byłem zaskoczony, że nie zadawano tego wcześniej, więc oto pytanie i odpowiedź.

mrwweb
źródło
Tylko uwaga dla każdego, kto utknie, pamiętaj, aby opróżnić permalinki przed sprawdzeniem wyniku.
un.pez.vivo

Odpowiedzi:

22

register_taxonomy()jest narzędziem do pracy. Z Kodeksu:

Ta funkcja dodaje lub zastępuje taksonomię.

Jedną z opcji byłoby skopiowanie register_taxonomy() $argsi zmodyfikowanie ich. Oznaczałoby to jednak, że wszelkie przyszłe zmiany w oryginalnym register_taxonomy()kodzie zostaną zastąpione.

Dlatego przynajmniej w tym przypadku lepiej jest uzyskać oryginalne argumenty, zmodyfikować te, które chcę zmienić, a następnie ponownie zarejestrować taksonomię. Inspiracją dla tego rozwiązania jest @Otto w tej odpowiedzi na podobne pytanie dotyczące niestandardowych typów postów .

Korzystając z peopleniestandardowego typu postu i people_categorytaksonomii z przykładu, zrobi to:

function wpse_modify_taxonomy() {
    // get the arguments of the already-registered taxonomy
    $people_category_args = get_taxonomy( 'people_category' ); // returns an object

    // make changes to the args
    // in this example there are three changes
    // again, note that it's an object
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // re-register the taxonomy
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Zauważ, że typuję trzeci register_taxonomy()argument do oczekiwanego typu tablicy. Nie jest to absolutnie konieczne, ponieważ register_taxonomy()zastosowania, wp_parse_args()które mogą obsłużyć objectlub array. Powiedział, że register_taxonomy()„s $argsmają być przedstawione w formie arraywedług Codex, więc czuje się dobrze do mnie.

mrwweb
źródło
Próbuję to zrobić, aby zmienić płaską taksonomię na hierarchiczną. Po prostu zmieniam właściwość hierarchiczną na true. W ten sposób, powoduje dwa pudełka meta dla taksonomii po prawej stronie ekranu po edycji, a ja jestem w stanie rzeczywiście dodać taksonomii ...
Joel Worsham
Upewnij się, że używasz tego samego ślimaka (np. 'people_category') Co oryginalna taksonomia, aby go zastąpić.
mrwweb
1
Geniusz! Czysty geniusz! Działa idealnie!
DaveyJake
1
Znalazłem problem z tym rozwiązaniem: capabilitiesparametr jest przechowywany wewnętrznie, ponieważ capnie zostanie przekazany do nowej zarejestrowanej taksonomii. Zobacz moją odpowiedź na podobne pytanie tutaj
Fabien Quatravaux
1
To wspaniałe, użyłem go, aby dodać hierarchiczne adresy URL do niestandardowej systematyki.
Brian Peat