Come modificare una tassonomia già registrata

18 set 2014, 02:20:02
Visualizzazioni: 25.6K
Voti: 23

Oggi ho avuto bisogno di modificare gli argomenti di una tassonomia personalizzata che era già stata registrata da un plugin di terze parti. Nello specifico, volevo impostare l'argomento show_admin_column a true e cambiare lo slug rewrite in modo che non fosse semplicemente lo slug della tassonomia. In questo caso, si trattava di un custom post type "Persone" con una tassonomia personalizzata "Categoria Persone".

Mi ha sorpreso che questa domanda non fosse stata posta prima, quindi ecco una domanda e risposta.

1
Commenti

Solo un appunto per chi si blocca, ricorda di aggiornare i permalink prima di verificare il risultato.

un.pez.vivo un.pez.vivo
10 dic 2017 14:30:36
Tutte le risposte alla domanda 2
9
29

register_taxonomy() è lo strumento adatto per questo lavoro. Dal Codex:

Questa funzione aggiunge o sovrascrive una tassonomia.

Un'opzione sarebbe quella di copiare gli $args di register_taxonomy() e modificarli. Tuttavia, questo significherebbe che eventuali modifiche future al codice originale di register_taxonomy() verrebbero sovrascritte.

Pertanto, almeno in questo caso, è preferibile ottenere gli argomenti originali, modificare quelli che si desidera cambiare, e poi ri-registrare la tassonomia. L'ispirazione per questa soluzione va a @Otto in questa risposta a una domanda simile sui tipi di post personalizzati.

Utilizzando il tipo di post personalizzato people e la tassonomia people_category dell'esempio, questo è il codice che fa al caso nostro:

function wpse_modify_taxonomy() {
    // ottiene gli argomenti della tassonomia già registrata
    $people_category_args = get_taxonomy( 'people_category' ); // restituisce un oggetto

    // apporta modifiche agli argomenti
    // in questo esempio ci sono tre modifiche
    // nota ancora che è un oggetto
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // ri-registra la tassonomia
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// aggancia la funzione all'hook init con priorità 11 per sovrascrivere la funzione originale register_taxonomy
add_action( 'init', 'wpse_modify_taxonomy', 11 );

Nota sopra che ho eseguito il typecast del terzo argomento di register_taxonomy() al tipo array atteso. Questo non è strettamente necessario poiché register_taxonomy() utilizza wp_parse_args() che può gestire sia un oggetto che un array. Detto questo, gli $args di register_taxonomy() dovrebbero essere inviati come un array secondo il Codex, quindi questa soluzione mi sembra corretta.

18 set 2014 02:20:02
Commenti

Sto cercando di fare questo per cambiare una tassonomia piatta in una tassonomia gerarchica. Sto semplicemente cambiando la proprietà hierarchical a true. Facendo questo, causa due meta box per la tassonomia a destra della schermata di modifica del post, e non riesco ad aggiungere effettivamente le tassonomie...

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

Assicurati di usare lo stesso slug (es. 'people_category') della tassonomia originale in modo da sovrascriverla.

mrwweb mrwweb
8 apr 2015 20:21:29

Geniale! Pura genialità! Ha funzionato perfettamente!

DaveyJake DaveyJake
31 mag 2015 13:02:30

Ho trovato un problema con questa soluzione: il parametro capabilities viene memorizzato internamente come cap quindi non verrà passato alla nuova tassonomia registrata. Vedi la mia risposta a una domanda simile qui

Fabien Quatravaux Fabien Quatravaux
14 dic 2015 10:37:40

Sembra che aggiungere flush_rewrite_rules(); dopo register_taxonomy sia necessario per applicare le regole di riscrittura del nuovo slug

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

@SajjadShirazy Non è consigliato perché questo comporterà il flush delle regole di riscrittura ad ogni caricamento di pagina. È meglio andare in Impostazioni > Permalink per eseguire manualmente il flush una sola volta.

mrwweb mrwweb
2 mag 2018 19:51:41

È fantastico, l'ho usato per aggiungere URL gerarchici a una tassonomia personalizzata.

Brian Peat Brian Peat
3 dic 2018 01:36:00

È dolce come il cioccolato. Grazie, buona giornata.

Davey Davey
22 gen 2020 13:21:51

Ho usato questo per rendere gerarchici i permalink della mia tassonomia personalizzata. Ma ora questi URL con una tassonomia gerarchica restituiscono un errore 404 Pagina non trovata. Ho anche ri-salvato i permalink. Qualche idea?

Laurent Laurent
30 apr 2021 14:31:27
Mostra i restanti 4 commenti
1
add_filter( 'register_taxonomy_args', function( $args, $taxonomy, $object_type ) {
    // Modifica gli argomenti di registrazione per la tassonomia 'people_category'
    if( $taxonomy !== 'people_category' || ! $object_type || $object_type[0] !== 'people' ) return $args;
    $args['show_admin_column'] = true; // Mostra colonna nell'amministrazione
    $args['rewrite']['slug'] = 'people'; // Modifica lo slug per i rewrite URL
    return $args;
}, 10, 3);
12 gen 2023 10:53:53
Commenti

Questo è il modo corretto per farlo al giorno d'oggi. Non dimenticare di risalvare i Permalink nelle Impostazioni.

dev_masta dev_masta
25 ago 2023 04:41:53