Cum să modifici o taxonomie care este deja înregistrată

18 sept. 2014, 02:20:02
Vizualizări: 25.6K
Voturi: 23

Astăzi am avut nevoie să modific argumentele unei taxonomii personalizate care era deja înregistrată de un plugin terț. Mai exact, am vrut să setez argumentul show_admin_column la true și să schimb slug-ul de rewrite astfel încât să nu fie doar slug-ul taxonomiei. În acest caz, era vorba de un tip de postare "People" cu o taxonomie personalizată "People Category".

Am fost surprins că această întrebare nu a fost pusă înainte, așa că iată întrebarea și răspunsul.

1
Comentarii

Doar o mică observație pentru cei care se blochează, nu uitați să reîmprospătați legăturile permanente înainte de a verifica rezultatul.

un.pez.vivo un.pez.vivo
10 dec. 2017 14:30:36
Toate răspunsurile la întrebare 2
9
29

register_taxonomy() este instrumentul potrivit pentru această sarcină. Din Codex:

Această funcție adaugă sau suprascrie o taxonomie.

O opțiune ar fi să copiem argumentele $args din register_taxonomy() și să le modificăm. Totuși, asta ar însemna că orice modificări viitoare la codul original al register_taxonomy() ar fi suprascrise.

Prin urmare, cel puțin în acest caz, este preferabil să obținem argumentele originale, să modificăm cele pe care vrem să le schimbăm și apoi să reînregistrăm taxonomia. Inspirația pentru această soluție vine de la @Otto în acest răspuns la o întrebare similară despre tipurile personalizate de postări.

Folosind tipul de postare personalizat people și taxonomia people_category din exemplu, iată cum putem face acest lucru:

function wpse_modify_taxonomy() {
    // obținem argumentele taxonomiei deja înregistrate
    $people_category_args = get_taxonomy( 'people_category' ); // returnează un obiect

    // facem modificări la argumente
    // în acest exemplu sunt trei modificări
    // din nou, rețineți că este un obiect
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // reînregistrăm taxonomia
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// conectăm funcția la prioritatea 11 pentru a suprascrie funcția originală register_taxonomy
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Observați că am convertit al treilea argument al register_taxonomy() în tipul array așteptat. Acest lucru nu este strict necesar, deoarece register_taxonomy() folosește wp_parse_args() care poate procesa atât object cât și array. Totuși, conform Codex, argumentele $args ale register_taxonomy() ar trebui să fie trimise ca array, așa că această abordare pare corectă.

18 sept. 2014 02:20:02
Comentarii

Încerc să fac asta pentru a schimba o taxonomie plată într-una ierarhică. Pur și simplu schimb proprietatea hierarchical în true. Prin aceasta, apar două cutii meta pentru taxonomia în partea dreaptă a ecranului de editare a postării și nu pot adăuga efectiv taxonomii...

Joel Worsham Joel Worsham
8 apr. 2015 19:48:32

Asigură-te că folosești același slug (de ex. 'people_category') ca și taxonomia originală, astfel încât să o suprascrii.

mrwweb mrwweb
8 apr. 2015 20:21:29

Geniu! Pur geniu! A funcționat perfect!

DaveyJake DaveyJake
31 mai 2015 13:02:30

Am găsit o problemă cu această soluție: parametrul capabilities este stocat intern ca cap, așa că nu va fi transmis la noua taxonomie înregistrată. Vezi răspunsul meu la o întrebare similară aici

Fabien Quatravaux Fabien Quatravaux
14 dec. 2015 10:37:40

se pare că adăugarea flush_rewrite_rules(); după register_taxonomy este necesară pentru aplicarea regulilor de rescriere ale noului slug

Sajjad Ziaenezhad Shirazi Sajjad Ziaenezhad Shirazi
30 apr. 2018 17:57:35

@SajjadShirazy Nu este recomandat, deoarece aceasta va reseta regulile de rescriere la fiecare încărcare de pagină. Este mai bine să mergi la Setări > Legături permanente pentru a le reseta manual o singură dată.

mrwweb mrwweb
2 mai 2018 19:51:41

Este minunat, l-am folosit pentru a adăuga URL-uri ierarhice unei taxonomii personalizate.

Brian Peat Brian Peat
3 dec. 2018 01:36:00

Este dulce ca ciocolata. Mulțumesc, să ai o zi minunată.

Davey Davey
22 ian. 2020 13:21:51

Am folosit acest cod pentru a face permalink-urile taxonomiei mele personalizate ierarhice. Dar acum aceste URL-uri cu taxonomie ierarhică returnează o eroare 404 Pagina nu a fost găsită. Am și re-salvat permalink-urile. Aveți idei?

Laurent Laurent
30 apr. 2021 14:31:27
Arată celelalte 4 comentarii
1
add_filter( 'register_taxonomy_args', function( $args, $taxonomy, $object_type ) {
    if( $taxonomy !== 'people_category' || ! $object_type || $object_type[0] !== 'people' ) return $args;
    $args['show_admin_column'] = true;
    $args['rewrite']['slug'] = 'people';
    return $args;
}, 10, 3);
12 ian. 2023 10:53:53
Comentarii

Acesta este modul corect de a face asta în zilele noastre. Nu uitați să resalvați Permalink-urile în Setări.

dev_masta dev_masta
25 aug. 2023 04:41:53