Utiliser les tags / catégories pour vos custom post type sous WordPress

Les taxonomies par défaut de WordPress – que sont les catégories et les mots-clés (tags), peuvent être associées à n’importe quel type de contenu personnalisé. Une technique que l’on peut également appliquer pour toutes les taxonomies personnalisés. De quoi satisfaire n’importe quel type classement pour vos contenus dans le back-office de WordPress.

Je pars du principe que vous disposez déjà d’un type de contenu personnalisé. Dans cet exemple, il s’agit de ‘Produits’ dont voici le code à réutiliser dans un thème ou un plugin de fonctions globales :

add_action( 'init', 'register_cpt_produit' );

function register_cpt_produit() {

    $labels = array( 
        'name' => _x( 'Produits', 'produit' ),
        'singular_name' => _x( 'Produit', 'produit' ),
        'add_new' => _x( 'Ajouter', 'produit' ),
        'add_new_item' => _x( 'Ajouter un produit', 'produit' ),
        'edit_item' => _x( 'Editer un produit', 'produit' ),
        'new_item' => _x( 'Nouveau produit', 'produit' ),
        'view_item' => _x( 'Voir le produit', 'produit' ),
        'search_items' => _x( 'Rechercher un produit', 'produit' ),
        'not_found' => _x( 'Aucun produit trouvé', 'produit' ),
        'not_found_in_trash' => _x( 'Aucun produit dans la corbeille', 'produit' ),
        'parent_item_colon' => _x( 'Produit parent :', 'produit' ),
        'menu_name' => _x( 'Produits', 'produit' ),
    );

    $args = array( 
        'labels' => $labels,
        'hierarchical' => false,
        'description' => 'Les produits de ma boutique.',
        'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields', 'revisions' ),
        'taxonomies' => array( 'category', 'post_tag' ),
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_position' => 5,

        'show_in_nav_menus' => true,
        'publicly_queryable' => true,
        'exclude_from_search' => false,
        'has_archive' => true,
        'query_var' => true,
        'can_export' => true,
        'rewrite' => true,
        'capability_type' => 'post'
    );

    register_post_type( 'produit', $args );
}

Par défaut, un type de contenu ne dispose pas forcément d’une ou plusieurs taxonomies. C’est le cas des ‘Pages’ qui constituent un type de contenu par défaut sous WordPress, à la différence des articles donc.

Pour associer les catégories et les mots-clés au custom post type Produits, remarquez la présence de la ligne :

'taxonomies' => array( 'category', 'post_tag' ),
Capture d'écran - Des catégories dans un type de contenu WordPress
Des catégories dans un type de contenu WordPress

Rendez-vous ensuite dans l’administration de WordPress puis remarquez l’association effective à la fois pour vos Articles (le cas par défaut) et vos Produits. Intéressant, non ?

51 commentaires

  1. Thomas

    En effet intéressant j’ai essayé sur mon nouveau site pour présenter mes références que j’ai développé sous wordpress.
    Connais tu l’impact que peux avoir les pages liées au tag au niveau référencement ?
    Exemple dans mon site j’utilise les lieux et créer une page taxonomy-lieu pour créer une page automatiquement sur les lieux de mes créations.

  2. Emmanuel GrosManu

    Article très intéressant. Une question cependant, comment gérer des cutom fields sur des custom post types pour les données qui n’ont pas vocation à être gérées par taxonomie (champs de texte libre) ?
    Idéalement sans passer par un plugin…

  3. Daniel R.

    Petite question con : la page de catégorie et de tag va bien afficher à la fois les articles et les custom-post-type ?

    Si oui, il faudra juste faire attention avec cette astuce car l’utilisateur pourrait souhaiter utiliser un système de catégories et de tags, sans pour autant que tout soit mélangé.

      1. Ekho

        Bonsoir,

        J’ai précisément ce problème, pourtant !

        J’ai créé un custom post et de nouvelles taxonomies avec le plugin « Custom Post Type UI ». Mais mes custom post n’apparaissent pas dans ma home, ni dans les catégories… Seuls les articles standards apparaissent.

        Sauriez-vous me dire pourquoi ?

        Merci d’avance,

        1. Aurélien Denis auteur de l’article

          Il faut afficher dans le menu les pages d’archives des custom post type. Si vous cherchez à les intégrer dans la boucle principale, il faudrait faire une modification du code via un pre_get_posts.

  4. matthieu

    Bonjour Aurélien,

    C’est étrange je n’arrive pas à afficher les catégories et les mots-clefs, j’ai pourtant copié-collé ton code tout à la fin du fichier functions.php de mon thème.

    Je confirme que le custom post type « produits » est bien en back office lui.

      1. matthieu

        Oui mais je n’avais pas mis de custom post type avant de voir ton code. Du coup je l’ai ajouté. Y compris avec la ligne précisant les taxonomies à utiliser. Je suis partie de 0 donc. Mais peut être que j’ai sauté une étape et qu’il y’avait autre chose à faire avant le code de cette page?

        En gros voici ce qu’il y’a tout à la fin de mon function.php :::

        $labels = array(
        ‘name’ => _x( ‘Produits’, ‘produit’ ),
        ‘singular_name’ => _x( ‘Produit’, ‘produit’ ),
        ‘add_new’ => _x( ‘Ajouter’, ‘produit’ ),
        ‘add_new_item’ => _x( ‘Ajouter un produit’, ‘produit’ ),
        ‘edit_item’ => _x( ‘Editer un produit’, ‘produit’ ),
        ‘new_item’ => _x( ‘Nouveau produit’, ‘produit’ ),
        ‘view_item’ => _x( ‘Voir le produit’, ‘produit’ ),
        ‘search_items’ => _x( ‘Rechercher un produit’, ‘produit’ ),
        ‘not_found’ => _x( ‘Aucun produit trouvé’, ‘produit’ ),
        ‘not_found_in_trash’ => _x( ‘Aucun produit dans la corbeille’, ‘produit’ ),
        ‘parent_item_colon’ => _x( ‘Produit parent :’, ‘produit’ ),
        ‘menu_name’ => _x( ‘Produits’, ‘produit’ ),
        );

        $args = array(
        ‘labels’ => $labels,
        ‘hierarchical’ => false,
        ‘description’ => ‘Les produits de ma boutique.’,
        ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’, ‘custom-fields’, ‘revisions’ ),
        ‘taxonomies’ => array(‘category’, ‘post_tag’),
        ‘public’ => true,
        ‘show_ui’ => true,
        ‘show_in_menu’ => true,
        ‘menu_position’ => 5,

        ‘show_in_nav_menus’ => true,
        ‘publicly_queryable’ => true,
        ‘exclude_from_search’ => false,
        ‘has_archive’ => true,
        ‘query_var’ => true,
        ‘can_export’ => true,
        ‘rewrite’ => true,
        ‘capability_type’ => ‘post’
        );

        register_post_type( ‘produit’, $args );

        je n’ai donc rien changé. Et je n’ai que ce custom post type (enfin d’inséré manuellement)

          1. Aurélien Denis auteur de l’article

            Je viens de copier tel quel le code fourni dans l’article et tout fonctionne : les catégories et les tags apparaissent bien dans un type de contenu ‘Produits’…

  5. matthieu

    C’est étrange… Surtout que je viens deux créer un deuxième custom post type. Impossible de lier avec les taxo category et post_tag, par contre ma custom taxo se retrouve dans articles et les deux autres types créés…

    Je précise que j’ai la dernière version de wordpress (3.5.1) mais bon ça change rien….

  6. matthieu

    AH je viens de trouver une solution pour arriver à mettre catégory et post_tag.

    une fois enregistré notre custom post type, j’ai mis ceci à la suite:

    register_taxonomy_for_object_type(‘post_tag’, ‘formation’,’show_tagcloud=1&hierarchical=true’); // ajout des mots clés pour notre custom post type

    register_taxonomy_for_object_type(‘category’, ‘formation’,’show_tagcloud=1&hierarchical=true’); // ajout des catégories pour notre custom post type

  7. Florent

    Merci pour ce tutoriel et en effet cela fonctionne bien avec les codes donnés…

    Par contre est-ce possible d’implémenter ce post_type dans un sous menu ?

    Après avoir créer mon menu :
    add_menu_page(__(‘SponsorPress Dashboard’,’sponsorpress’), __(‘SponsorPress’,’sponsorpress’), ‘activate_plugins’, ‘sponsor-dashboard’, ‘wpspo_dashboard’, WP_CONTENT_URL.’/plugins/sponsorpress/images/sponsor-menu-icon.png’ );

    Je tente de basculer le post-type créer ensuite dans ce menu avec ce code dans le post_type :
    ‘show_in_menu’ => ‘sponsor-dashboard’,

    Mais cela ne fonctionne pas !

    Merci

      1. Florent

        Re…

        Ben en fait j’ai réussi mais en le déclarant 2 fois. 1 fois avec add_action(« admin_menu ») et 1 autre avec add_action( ‘init’, ‘register_wpspo_projets’ ).

        Bon je pense que c’est très très très très moche mais ca marche et ca fait exactement ce que je veux…

  8. xrainz

    Bonjour,
    Je viens juste de commencer à prendre en main wordpress et ses tutoriels.

    je me permets de réagir à ce post surtout pour poser une question.

    Je souhaite créér un formulaire par défaut dans la partie admin (éditeur ) (à la place de ajout article ) qui me permettre lorsque je clique sur nouveau formulaire, il s’affiche, mon éditeur (celui qui renseigne les articles) remplit les différents champs, et lorsque il clique sur submit, les différents champs renseignés sont enregistrés dans la bdd. ces éléments renseignés sont par la suite affchés en tant qu’article sur le site online grâce à une fonction
    suivant le template que j’ai crée pour l’affichage d’un article.

    Est ce grace aux custom post type, que l’on peux créer celà? j’espere que je me suis assez bien expliqué!.

    merci beaucoup.

  9. Phoenix

    Bonjour Aurélien,

    J’utilise les custom post type (de type article), et tout fonctionne parfaitement bien.
    Lorsque je suis dans une archive de catégorie (celles de base de WP) sur le front office, j’affiche la description de cette catégorie (couplé avec le pluging « categorytinymce »).

    Par contre, quand je vais sur l’archive d’une catégorie de mes custom post type, la description ne s’affiche pas. Aurais-tu une idée de pourquoi ? Faut-il ajouter une ligne dans category.php ?

    J’utilise la dernière version de WP.

    Merci d’avance pour ton éventuelle réponse.

      1. Phoenix

        Merci mais je ne vois pas vraiment le rapport… je ne veux pas modifier l’affichage de la description de la catégorie, je veux qu’elle s’affiche pour les categories de mes custom post type.

        Pour le moment j’ai ceci pour définir cette catégorie (nommé « gamme ») :

        register_taxonomy( ‘gamme’, ‘product’, array( ‘hierarchical’ => true, ‘label’ => ‘Gamme’, ‘query_var’ => true, ‘rewrite’ => true ) );

          1. Phoenix

            J’ai trouvé, en fait tout ceci s’affiche dans archive.php et non dans category.php. Merci tout de même pour ton aide !

  10. Aurore dugaussy

    Bonjour Aurélien, félicitation pour ton site : une vrai niche de bonnes idées !!
    question : est-il possible d’avoir un menu horizontal uniquement constitué des tags qui permettrait de naviguer à travers les articles à conditions que les articles soient tous associés à des mots clés.
    ?
    Merci d’avance.
    Aurore

    1. Aurélien Denis auteur de l’article

      Dans Apparence > Menus du back-office de WordPress, il est possible de constituer un menu avec des mots-clés. Je ne pense pas que cela soit très SEO-friendly mais à voir. Sinon, le widget nuage de mots-clés fera l’affaire.

      Merci pour les compliments !

  11. JM

    Bonjour,

    Bravo pour le tuto, qui confirme ce que je pensais pour rattacher des tags / mots clés, mais je n’obtiens pas les CPT lorsque je clique sur un tag, en Front office, ni quand je fait une recherche sur un de ces tags => pas de renvoi au CP auquel a été rattaché le dit tag:
    – J’ai bien la ligne  » ‘exclude_from_search’ => false, » dans la création de mon CP ;
    – J’ai bien créée un tag et utilisé ce tag (ou d’autres..) attaché à un CP;
    -NB : j’utilise la version 3.7, le theme twentythirteen, et j’ai utilisé ACF pour creer des champs personnalisé sur les CP…

    Merci bcp pour un avis ou une solution,
    Cdt,
    JMB

  12. Nadege

    Bonjour
    Je viens de tenter le tuto qui es très intéressant merci
    J’aurais néanmoins une question
    Comment fait on pour afficher les post juste par catégorie
    Exemple dans catégorie j’ai cat1, cat2, cat3
    Je voudrais afficher juste les post de cat2 par exemple
    Merci
    Nadège

    1. Guillaume

      Bonjour et merci pour le tuto pour moi tout fonctionne sauf que comme Nadege je ne peux pas afficher par catégorie.
      As-tu trouvé une solution pour afficher les articles d’un custom post type par catégorie ?
      Si je clique sur une catégorie j’ai une erreur 404. As-tu le même problème ?

  13. sylvainbr

    Normalement les catégories et les mots-clés existants ne doivent pas se mélanger.

    Sans en avoir rentré de nouvelles dans ce nouveau menu, je vois celles déjà rentrés par le biais de mes articles.

    Voici mon code (tiré de votre code):

    add_action( ‘init’, ‘register_cpt_documentation’ );

    function register_cpt_documentation() {

    $labels = array(
    ‘name’ => _x( ‘Documentations’, ‘documentation’ ),
    ‘singular_name’ => _x( ‘Documentation’, ‘documentation’ ),
    ‘add_new’ => _x( ‘Ajouter’, ‘documentation’ ),
    ‘add_new_item’ => _x( ‘Ajouter un document’, ‘documentation’ ),
    ‘edit_item’ => _x( ‘Editer un document’, ‘documentation’ ),
    ‘new_item’ => _x( ‘Nouveau document’, ‘documentation’ ),
    ‘view_item’ => _x( ‘Voir le document’, ‘documentation’ ),
    ‘search_items’ => _x( ‘Rechercher un document’, ‘documentation’ ),
    ‘not_found’ => _x( ‘Aucun document trouvé’, ‘documentation’ ),
    ‘not_found_in_trash’ => _x( ‘Aucun document dans la corbeille’, ‘documentation’ ),
    ‘parent_item_colon’ => _x( ‘Documentation parent :’, ‘documentation’ ),
    ‘menu_name’ => _x( ‘Documentations’, ‘documentation’ ),
    );

    $args = array(
    ‘labels’ => $labels,
    ‘hierarchical’ => false,
    ‘description’ => ‘Les documents dans l espace documentation.’,
    ‘supports’ => array( ‘title’, ‘editor’, ‘thumbnail’, ‘custom-fields’, ‘revisions’ ),
    ‘taxonomies’ => array( ‘category’, ‘post_tag’ ),
    ‘public’ => true,
    ‘show_ui’ => true,
    ‘show_in_menu’ => true,
    ‘menu_position’ => 5,

    ‘show_in_nav_menus’ => true,
    ‘publicly_queryable’ => true,
    ‘exclude_from_search’ => false,
    ‘has_archive’ => true,
    ‘query_var’ => true,
    ‘can_export’ => true,
    ‘rewrite’ => true,
    ‘capability_type’ => ‘post’
    );

    register_post_type( ‘documentation’, $args );

    Si vous pouviez m’expliquer le dysfonctionnement, Merci

  14. Hervé

    Bonjour,
    Je voudrai utiliser les tags de base (article) de WP dans d’autres CPT : annuaires (livres, vidéo, sites web …).
    Il me semble important d’unifier les tags pour une recherche unifié.
    Est-ce possible ?
    @+

  15. Hervé

    Bonjour,
    Bon ok je n’ai pas été clair.
    Je cherche à faire plusieurs listes/ annuaires (sites web, livres ….) en me basant sur les CPT et les articles de WP.
    Les catégories sont différentes pour chaque annuaire mais pas les tags. Je cherche donc un moyen d’avoir une seule base de mots clés qui soient réutilisables par tous les annuaires.

    J’ai testé plusieurs plugins (ACF …) et maintenant http://wordpress.org/plugins/pods/
    Cela me parait possible mais je n’y suis pas encore arrivé (pour avoir 1 seule taxonomie tags et des liens dans le menu pour chaque pods/annuaire)
    Voilà j’espère avoir été lus clair

    1. Aurélien Denis auteur de l’article

      Lors de la création des différents CPT, il te suffit d’indiquer les taxonomies à utiliser. Soient celles que WordPress créé par défaut (catégories et mots-clés), soient des nouvelles que tu ajoutes. Tout simplement !

  16. Olivier

    Bonjour,
    Est-il possible de créer par la suite des filtres sur ces catégories ?

    J’aimerai pouvoir créer des custom types pour des annonces auto, puis ensuite créer des filtres pour trier par modèles, années, etc…

    Merci !

  17. Francois

    Bonjour
    j’ai pris un wordpress 4.1, mis le thème Twenty Fifteen et ajouter dans fonction.php votre cpt produit. J’ai créé un produit bidon avec un mot-clé. (toto)
    J’essaye d’afficher en cliquant sur produit/mot-clé puis afficher, cela m’affiche une belle page blanche.
    Je rajoute un article (dans Article) avec le même mot-clé que celui de produit et si je refais la manip pour afficher les mots clé je n’obtiens que l’article créé dans Article et non l’autre créé dans Votre CPT produit..

    J’ai du rater un truc parce que je ne vois pas pourquoi il ne veut pas m’afficher dans la boucle des tags l’article créé dans votre CPT.
    Cordialement

  18. mouzaia

    Bonjour, très intéressant en effet, mais je cherche un truc et je ne trouve pas. Je voudrais utiliser tant dans mes posts que mes pages que mes liens les même catégories, et je ne trouve pas, du moins pour les liens. Si je regarde dans mon wp_term, je vois bien toutes mes categories, mais aussi le descripteur « category » ou « link_category ». Que faire ?
    Merci

Laisser un commentaire

Thèmes & Plugins
Premium By WP Channel

WP Alacarte propose des produits et services de qualité
made in France pour la plateforme WordPress.

Tout est prêt pour créer votre site à la carte !

  • Thèmes et extensions premium
  • Facilité d’utilisation garantie
  • Temps de chargement optimisé
  • Personnalisation avancée
Découvrir

Rejoignez la communauté WordPress !

Faites partie de l’aventure en devenant membre d’une association WordPress. Conférences, ateliers, BarCamp, WordCamp… Venez
partager votre passion pour WordPress !

Aurélien DENIS,
président des associations WordPress Francophone et WPMX