web-dev-qa-db-fra.com

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

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

Ainsi, par exemple, si mon site comporte une catégorie appelée Linux (linux) et que je souhaite également créer un terme de taxonomie personnalisé appelé "Linux", il ressemble à quelque chose comme Linux (linux-2), c'est-à-dire que les slugs doivent être différents.

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

Est-il possible d'avoir les mêmes termes sous catégories/tags et 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 étiquette et assignez-les à ces publications (uniquement à des fins de test).

  2. Enregistrer les paramètres de permalien.

  3. créez deux nouveaux termes dans 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, puis affectez-les à une nouvelle publication sous un type de publication personnalisé.

  4. Supprimer 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 étiquette) 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 balise) et la taxonomie personnalisée sont renommées!

8
its_me

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 existait depuis des années et qu'il s'appliquait également aux taxonomies douanières. Voir les billets: # 5809 , # 21950 et # 22023 .

Si tout se déroule comme prévu, il sera réglé dans 3.83,94.1 4.2. UPDATE: Oui, corrigé !


En attendant, voici un plan pour surmonter le problème: définissez automatiquement un suffixe 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 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, changez 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 bogue corrigé ...

Videz la base de données et effectuez une recherche regex à l'aide d'un éditeur de texte approprié tel que Sublime Text ou TextMate (ou comme ceci ).

Ce n’est probablement pas le meilleur moyen de le faire, mais suffisamment bon pour faire le travail.

9
its_me