Les taxonomies personnalisées ne peuvent-elles pas avoir les mêmes termes (slugs) que les catégories?

8

Je savais qu'il n'était pas possible d'avoir les mêmes termes (termes slugs) sous les catégories et les balises, mais étonnamment, comme je l'ai réalisé aujourd'hui, c'est aussi le cas avec les taxonomies personnalisées.

Ainsi, par exemple, si mon site a une catégorie appelée Linux (linux)et que je souhaite également créer un terme de taxonomie personnalisé appelé «Linux», cela ressemblerait à quelque chose Linux (linux-2), c'est-à-dire que les limaces doivent être différentes.

Et si j'essaye de renommer le slug linux, j'obtiens l'erreur "Le slug 'linux' est déjà utilisé par un autre terme" .

Est-il possible d'avoir les mêmes termes dans les catégories / balises et les taxonomies personnalisées (sans faire de ravages)?


Comment reproduire le problème?

  1. Créez 3 à 5 nouveaux messages. Créez une nouvelle catégorie et une nouvelle étiquette et attribuez-les à ces publications (uniquement à des fins de test).

  2. Enregistrez les paramètres de permalien.

  3. créez deux nouveaux termes sous la taxonomie personnalisée avec le même nom et le même slug que la catégorie et la balise que vous avez créées précédemment, et affectez-les à une nouvelle publication sous un type de publication personnalisé.

  4. Supprimez les taxonomies personnalisées.

  5. Essayez de les recréer, et vous obtiendrez maintenant l'erreur: "Le slug 'XXX' est déjà utilisé par un autre terme."

Parfois, cela reproduisait le problème, parfois non.

Mais...

Si vous pouvez créer une catégorie (ou une balise) et une taxonomie personnalisée avec le même nom et le même slug, faites-le. Ensuite, renommez l'un d'eux et vous remarquerez que la catégorie (ou la balise) et la taxonomie personnalisée sont renommées!

c'est moi
la source
Hmm, ça ne m'arrive pas. Pouvez-vous coller votre code de taxonomie personnalisé?
Matthew Boynes du
@MatthewBoynes Oh, voici à quoi ça ressemble: gist.github.com/anonymous/5267905cccae4d52cc1b
its_me
J'utilise la dernière version nocturne de WordPress et votre code, mot pour mot, ne rencontre pas cette erreur. Voici ce que vous devez faire ensuite: (1) Dans une installation propre de WordPress 3.6.1, ajoutez simplement votre type de message et votre code de taxonomie à un thème propre. Utilisez Twenty Thirteen ou Toolbox ou quelque chose. Si cela fonctionne, vous savez que le problème n'est pas dans WP mais à la place avec un plugin ou votre thème. Si cela se produit, essayez la même chose avec la dernière version nocturne de 3.7. Si cela fonctionne, vous n'avez pas à vous inquiéter car la version 3.7 sera probablement lancée la semaine prochaine. Si cela se produit toujours, fournissez tout le code nécessaire pour le répliquer.
Matthew Boynes
@MatthewBoynes D'accord. Je vais le tester et voir. Soit dit en passant, je suis déjà sur 3.7 stable, sorti hier / aujourd'hui.
its_me
Ah, tu as raison, j'ai raté ça en quelque sorte!
Matthew Boynes

Réponses:

9

Il s'avère que c'est un bug dans le noyau. J'étais sur le point de le signaler, mais j'ai découvert qu'il existe depuis, comme des années, et s'applique également aux taxonomies personnalisées. Voir billets: # 5809 , # 21950 et # 22023 .

Si tout se passe comme prévu, il est réglé pour être corrigé dans 3.8 3.9 4.14.2. MISE À JOUR: Oui, corrigé !


En attendant, voici un plan pour surmonter le problème - définissez automatiquement un suffixe de slug personnalisé pour tous les termes nouvellement créés sous une taxonomie:

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

    }
}

Ce n'est pas rétrospectif, c'est-à-dire que seuls les slugs des nouveaux termes de la taxonomie («livres» dans notre cas) sont créés avec notre suffixe personnalisé («-books»).

Pour définir un préfixe à la place, modifiez cette ligne dans la fonction:

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

à quelque chose comme ça:

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

Et une fois le bug corrigé ...

Vider la base de données et faire une recherche regex et remplacer à l'aide d'un éditeur de texte approprié comme Sublime Text ou TextMate (ou comme ça ).

Probablement pas la meilleure façon de le faire, mais assez bon pour faire le travail.

c'est moi
la source