Como modificar uma taxonomia já registrada

16

Hoje, precisei alterar os argumentos de uma taxonomia personalizada que já estava registrada por um plug-in de terceiros . Especificamente, eu queria definir o argumento show_admin_column como true e alterar o rewrite slug para que não fosse apenas o slug da taxonomia. Nesse caso, era um tipo de postagem "Pessoas" com uma taxonomia personalizada "Categoria de pessoas".

Fiquei surpreso que isso não tenha sido perguntado antes, então aqui está uma pergunta e uma resposta.

    
por mrwweb 18.09.2014 / 01:20

1 resposta

17

register_taxonomy() é a ferramenta para o trabalho. Do Codex:

  

Esta função adiciona ou substitui uma taxonomia.

Uma opção seria copiar o register_taxonomy() $args e modificá-los. No entanto, isso significaria que quaisquer alterações futuras no código register_taxonomy() original seriam sobrescritas.

Portanto, pelo menos nesse caso, é preferível obter os argumentos originais, modificar os que eu quero alterar e, em seguida, registrar novamente a taxonomia. A inspiração para essa solução vai para @Oto nesta resposta a uma pergunta semelhante sobre tipos de postagem personalizados .

Usando o tipo de postagem personalizado people e a people_category taxonomia do exemplo, isso será feito:

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

Observe acima que eu teclar o terceiro argumento register_taxonomy() para o tipo de matriz esperado. Isso não é estritamente necessário, pois register_taxonomy() usa wp_parse_args() que pode manipular um object ou array . Dito isso, register_taxonomy() $args devem ser enviados como array de acordo com o Codex, então isso parece certo para mim.

    
por mrwweb 18.09.2014 / 01:20