Come modificare una tassonomia già registrata


18

Oggi avevo bisogno di cambiare gli argomenti su una tassonomia personalizzata che era già stata registrata da un plugin di terze parti . In particolare, volevo impostare l' show_admin_columnargomento truee cambiare la rewritelumaca in modo che non fosse solo la lumaca della tassonomia. In questo caso, era un tipo di post "Persone" con una tassonomia personalizzata "Categoria persone".

Sono stato sorpreso che questo non sia stato chiesto prima, quindi ecco una domanda e risposta.


Solo una nota a margine per chiunque rimanga bloccato, ricordati di lavare i permalink prima di controllare il risultato.
un.pez.vivo il

Risposte:


22

register_taxonomy()è lo strumento per il lavoro. Dal codice:

Questa funzione aggiunge o sovrascrive una tassonomia.

Un'opzione sarebbe quella di copiarli register_taxonomy() $argse modificarli. Tuttavia, ciò significherebbe che eventuali future modifiche al register_taxonomy()codice originale verrebbero sovrascritte.

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

Utilizzando il peopletipo di post personalizzato e la people_categorytassonomia dell'esempio, questo lo farà:

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 );

Nota sopra che ho scritto il terzo register_taxonomy()argomento sul tipo di array previsto. Questo non è strettamente necessario come register_taxonomy()usi wp_parse_args()che possono gestire un objecto array. Detto questo, register_taxonomy()s' $argsdovrebbero essere presentati come un arraysecondo il Codex, quindi questo si sente giusto per me.


Sto provando a farlo per cambiare una tassonomia piatta in una tassonomia gerarchica. Sto semplicemente cambiando la proprietà gerarchica in true. In questo modo, provoca due meta box per la tassonomia sulla destra della schermata di modifica dei post e non riesco ad aggiungere effettivamente le tassonomie ...
Joel Worsham

Assicurati di usare la stessa lumaca (es. 'people_category') Della tassonomia originale in modo da sovrascriverla.
mrwweb,

1
Genio! Genio puro! Ha funzionato perfettamente!
DaveyJake,

1
Ho riscontrato un problema con questa soluzione: il capabilitiesparametro è memorizzato internamente in capmodo da non essere passato alla nuova tassonomia registrata. Vedi la mia risposta a una domanda simile qui
Fabien Quatravaux,

1
Questo è meraviglioso, l'ho usato per aggiungere URL gerarchici a una tassonomia personalizzata.
Brian Peat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.