Como modificar uma taxonomia já registrada


18

Hoje eu precisava alterar os argumentos em uma taxonomia personalizada que já estava registrada por um plug-in de terceiros . Especificamente, eu queria definir o show_admin_columnargumento truee alterar a rewritelesma para que não fosse apenas a lesma da taxonomia. Nesse caso, era um tipo de postagem "Pessoas" com uma taxonomia customizada "Categoria de pessoas".

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


Apenas uma nota lateral para alguém ficar preso, lembre-se de liberar os links permanentes antes de verificar o resultado.
un.pez.vivo

Respostas:


22

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

Esta função adiciona ou substitui uma taxonomia.

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

Portanto, pelo menos nesse caso, é preferível obter os argumentos originais, modificar os que quero alterar e registrar novamente a taxonomia. A inspiração para esta solução está no @Otto nesta resposta a uma pergunta semelhante sobre tipos de postagem personalizados .

Usando o peopletipo de postagem personalizada e a people_categorytaxonomia 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 digitei o terceiro register_taxonomy()argumento no tipo de matriz esperado. Isso não é estritamente necessário, pois os register_taxonomy()usos wp_parse_args()que podem manipular um objector array. Dito isto, register_taxonomy()'s $argsé suposto ser submetido como um arrayacordo com o Codex, de modo que este se sente bem para mim.


Estou tentando fazer isso para alterar uma taxonomia plana para uma taxonomia hierárquica. Estou simplesmente alterando a propriedade hierárquica para true. Ao fazer isso, ele faz com que duas caixas de meta para a taxonomia da direita da tela do pós editar e eu sou incapaz de realmente adicionar taxonomias ...
Joel Worsham

Certifique-se de usar a mesma lesma (por exemplo 'people_category') da taxonomia original para substituí-la.
mrwweb

11
Gênio! Gênio puro! Funcionou perfeitamente!
DaveyJake

11
Encontrei um problema com esta solução: o capabilitiesparâmetro é armazenado internamente, cappara que não seja passado para a nova taxonomia registrada. Veja a minha resposta a uma pergunta semelhante aqui
Fabien Quatravaux

11
Isso é maravilhoso, usei-o para adicionar URLs hierárquicos a uma taxonomia personalizada.
Brian Peat
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.