As taxonomias personalizadas não podem ter os mesmos termos (slugs) que as categorias?

8

Eu sabia que não é possível ter os mesmos termos (termos slugs) em categorias e tags, mas surpreendentemente, como eu percebi hoje, também é o caso das taxonomias personalizadas.

Por exemplo, se meu site tem uma categoria chamada Linux (linux)e eu também quero criar um termo de taxonomia personalizado chamado 'Linux', seria algo como Linux (linux-2), ou seja, as lesmas devem ser diferentes.

E se eu tentar renomear a lesma de volta linux, recebo o erro "A lesma 'linux' já está sendo usada por outro termo" .

É possível ter os mesmos termos em categorias / tags e taxonomias personalizadas (sem causar estragos)?


Como replicar o problema?

  1. Crie 3-5 novas postagens. Crie uma nova categoria e tag e atribua-as a essas postagens (apenas para fins de teste).

  2. Salve as configurações de permalink.

  3. crie dois novos termos sob a taxonomia customizada com o mesmo nome e slug que a categoria e a tag que você criou anteriormente e atribua-os a uma nova postagem com um tipo de postagem personalizada.

  4. Exclua as taxonomias personalizadas.

  5. Tente recriá-los e você receberá o erro: "A lesma 'XXX' já está em uso por outro termo".

Às vezes isso replicaria o problema, às vezes não.

Mas...

Se você conseguir criar uma categoria (ou tag) e uma taxonomia customizada com o mesmo nome e slug, faça-o. Em seguida, renomeie um deles e você notará que a categoria (ou tag) e a taxonomia personalizada foram renomeadas!

sou eu
fonte
Hmm, isso não acontece para mim. Você pode colar seu código de taxonomia personalizado?
Matthew Boynes
@MatthewBoynes Oh, isso é o que parece: gist.github.com/anonymous/5267905cccae4d52cc1b
its_me
Estou usando a última versão noturna do WordPress e seu código, literalmente, não encontra esse erro. Aqui está o que você deve fazer a seguir: (1) Em uma instalação limpa do WordPress 3.6.1, adicione apenas seu tipo de postagem e código de taxonomia a um tema limpo. Use Twenty Treze ou Toolbox ou algo assim. Se funcionar, você sabe que o problema não está no WP, mas em um plugin ou no seu tema. Se isso ocorrer, tente a mesma coisa com a versão noturna mais recente da versão 3.7. Se funcionar, você não precisa se preocupar porque o 3.7 é lançado provavelmente na próxima semana. Se isso acontecer ainda, forneça todo o código necessário para replicá-lo.
Matthew Boynes
@MatthewBoynes Okay. Vou testá-lo e ver. A propósito, eu já estou no 3.7 estável, lançado em algum momento ontem / hoje.
its_me
Ah, você está certo, de alguma forma eu senti falta disso!
Matthew Boynes

Respostas:

9

Acontece que este é um bug no núcleo. Eu estava prestes a denunciá-lo, mas descobri que ele existe há, há anos, e se aplica também a taxonomias personalizadas. Veja ingressos: # 5809 , # 21950 e # 22023 .

Se tudo correr como planejado, ele será fixado em 3.8 3.9 4.14.2 UPDATE: Sim, consertado !


Enquanto isso, aqui está um plano para superar o problema - defina automaticamente um sufixo de slug personalizado para todos os termos recém-criados sob uma taxonomia:

/*
 * Set custom slug suffix for terms of a taxonomy
 * 
 * http://wordpress.stackexchange.com/q/42550/10691
 * http://wordpress.stackexchange.com/q/71304/10691
 * http://wordpress.stackexchange.com/q/120096/10691
 * https://github.com/WordPress/WordPress/blob/master/wp-includes/taxonomy.php
 */
add_action( 'created_term', 'aahank_add_suffix_to_term', 10, 3 );
function aahank_add_suffix_to_term( $term_id, $tt_id, $taxonomy ) {
    if( $taxonomy == 'book' ) {

        // e.g. Term name 'PHP' and term slug 'php-books'
        $term = get_term( $term_id, $taxonomy );
        $args = array( 'slug' => $term->slug . '-books' );
        wp_update_term( $term_id, $taxonomy, $args );

    }
}

Isso não é retrospectivo, ou seja, lesmas apenas dos novos termos sob a taxonomia ('livros' no nosso caso) são criadas com nosso sufixo personalizado ('-books').

Para definir um prefixo, altere esta linha na função:

$args = array( 'slug' => $term->slug . '-books' );

para algo como isto:

// e.g. Term name 'PHP' and term slug 'books-php'
$args = array( 'slug' => 'books-' . $term->slug );

E uma vez que o bug foi corrigido ...

Despejar o banco de dados e fazer uma pesquisa regex e substituir usando um editor de texto adequado, como Sublime Text ou TextMate (ou assim ).

Provavelmente não é a melhor maneira de fazê-lo, mas é bom o suficiente para fazer o trabalho.

sou eu
fonte