Créer des Custom Post Types avec WordPress

113 commentaires
Créer des Custom Post Types avec WordPress

Les types de contenu personnalisé ou Custom Post Types constituent la pierre angulaire des architectures sur-mesure pour WordPress. Apparus en 2010, ils sont présents dans le coeur, les extensions et bien entendu les thèmes.

L’usage des Custom Post Types constitue le fer de lance d’une architecture de site efficace sous WordPress. Ne vous limitez plus aux seuls articles et pages pour classer votre information et la présenter à vos visiteurs. Bâtir sa propre architecture de données est la voie royale pour un site efficace et bien référencé.

Notions de base

Par défaut, WordPress est fourni avec deux types de contenus par défaut que sont les articles et les pages. Et bien, sachez qu’il est possible de créer vos propres types – à ne pas confondre avec les modèles de pages WordPress de manière à créer votre propre architecture. Des années après l’écriture initiale de ce tutoriel, ces aspects fondamentaux que sont les types de contenus personnalisés, les taxonomies personnalisées et les champs personnalisés – ce que j’appelle le triptyque architectural, reste méconnu de nombreux prestataires de services.

Ce système est très utile pour des sites qui ont besoin de lister du contenu qui ne sont pas des articles ou des pages au sens sémantique du terme… autrement dit la plupart des sites Web dont voici quelques exemples récurrents :

  • Les sites de e-commerce pour vendre leurs produits ;
  • Les agences immobilières pour vendre leur biens ;
  • Les concessions automobiles pour vendre des voitures ;

Il n’est pas rare par ailleurs de se retrouver avec plusieurs types de contenu personnalisé au sein d’un même site. L’important est que vos données reste bien classées pour permettre un traitement efficace tant d’un point de vue référencement que web-design.

Enfin, sachez qu’aussi bien votre thème que les plugins que vous installez peuvent générer de nouveaux types de contenu personnalisé – visibles ou invisibles dans votre administration.

On retrouvera le même type de présentation du contenu que pour les pages ou les articles. Un exemple ci-dessous avec des petites annonces :

La vue liste est donc similaire à celles que vous connaissez déjà pour les articles et les pages. Les colonnes pourront éventuellement varier selon les projets et vos besoins via une extension comme Admin Columns que j’affectionne tout particulièrement dans sa version professionnelle.

Créer un Custom Post Type par le code (type de contenu personnalisé)

Intégration dans le thème ou dans une extension ?

Avant même de générer le code de notre type de contenu personnalisé se pose la question de son intégration : dois-je l’injecter dans mon thème ou bien dans une extension ?

J’ai souvent eu à débattre de cette question avec des membres de la communauté WordPress mais selon moi c’est dans le thème que vous devriez le laisser et ce, pour les raisons suivantes :

  1. Le thème est responsable de l’affichage de vos données et donc des structures propres à votre type de contenu personnalisé : si vous changez de thème, les données s’afficheront comme le gabarit par défaut ;
  2. On ne change pas de thème comme on installe ou on désinstalle une extension ce qui me fait délaisser l’argument de séparation entre le contenant et le contenu souvent avancé. Le placement du code dans une extension conservera l’accès aux données mais brisera le point précédent. Notez par ailleurs que la suppression des lignes de code n’efface pas les contenus créés, ils sont toujours stockés en base de données ;

Partant de cette analyse, le tutoriel présenté optera pour le placement dans le thème comme stipulé dans le Codex.

Recours à un générateur en ligne

Nous allons utiliser la fonction register_post_type de WordPress afin d’ajouter cet élément d’architecture. Pour vous faciliter la vie, je vous recommande ce générateur en ligne gratuit de chez GenerateWP bien qu’imparfait sur deux points :

  1. La priorité sur le hook devrait être fixée à 10 et non 0 (c’est la dernière ligne du code d’exemple ci-dessous) ;
  2. La réécriture d’URL pour avoir le mot-clé dans l’URL n’est pas i18n-friendly autrement dit compatible multilingue ;

Vous pouvez donc le mettre à jour à partir du code que je vous propose.

Localisez ensuite le fichier functions.php présent dans le dossier /wp-content/themes/NOM_DU_THEME/ à l’aide de votre client FTP favori. Je vous déconseille fortement de passer par le menu Apparence puis Éditeur, vous risqueriez de casser votre site à la moindre erreur de virgule.

Si vous utilisez un thème premium, il est impératif de créer un thème enfant sinon vos modifications seront écrasées à la prochaine mise à jour.

Prenez soin de ne jamais rédiger du texte en français dans le code, cela posera des soucis d’affichage avec les caractères accentués. Restez en anglais afin de faciliter le travail de traduction du thème et pour être raccord avec le reste de votre installation WordPress.

Pour les utilisateurs avancés, vous pouvez créer un fichier de fonctions dédié à votre architecture personnalisée. Cela permet de segmenter les fichiers au sein du thème et de faciliter la maintenance au fil des années. Ainsi, mon fichier functions.php occupe une dizaine de lignes que je divise en plusieurs fichiers comme ceci :

<?php if (! defined('ABSPATH')) die('Restricted Area');


require_once(get_template_directory() . '/inc/theme-scripts.php');
require_once(get_template_directory() . '/inc/theme-functions.php');
require_once(get_template_directory() . '/inc/theme-content.php');
require_once(get_template_directory() . '/inc/theme-ajax.php');
require_once(get_template_directory() . '/inc/theme-woocommerce.php');


?>

Il va de soi c’est une pratique personnelle et que les dénominations de fichiers ne suivent aucune logique spécifique à WordPress.

Prenons l’exemple d’un site d’annonces immobilières pour lequel nous souhaitons créer un type de contenu Propriétés. C’est un nom court capable d’englober tout type de biens.

function wpc_cpt() {

/* Property */
$labels = array(
'name' => _x('Properties', 'Post Type General Name', 'textdomain'),
'singular_name' => _x('Property', 'Post Type Singular Name', 'textdomain'),
'menu_name' => __('Properties', 'textdomain'),
'name_admin_bar' => __('Properties', 'textdomain'),
'parent_item_colon' => __('Parent Item:', 'textdomain'),
'all_items' => __('All Items', 'textdomain'),
'add_new_item' => __('Add New Item', 'textdomain'),
'add_new' => __('Add New', 'textdomain'),
'new_item' => __('New Item', 'textdomain' ),
'edit_item' => __('Edit Item', 'textdomain'),
'update_item' => __('Update Item', 'textdomain'),
'view_item' => __('View Item', 'textdomain'),
'search_items' => __('Search Item', 'textdomain'),
'not_found' => __('Not found', 'textdomain'),
'not_found_in_trash' => __('Not found in Trash', 'textdomain'),
);
$rewrite = array(
'slug' => _x('property', 'property', 'textdomain'),
'with_front' => true,
'pages' => true,
'feeds' => false,
);
$args = array(
'label' => __('property', 'textdomain'),
'description' => __('Properties', 'textdomain'),
'labels' => $labels,
'supports' => array('title', 'editor', 'thumbnail', 'comments', 'revisions', 'custom-fields'),
'taxonomies' => array('property_type'),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-admin-home',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => false,
'exclude_from_search' => false,
'publicly_queryable' => true,
'query_var' => 'property',
'rewrite' => $rewrite,
'capability_type' => 'page',
);
register_post_type('property', $args);
}

add_action('init', 'wpc_cpt', 10);

Vous devez remplacer le textdomain par celui de votre thème en l’identifiant dans une chaine de traduction.

Notez également la présence de l’argument taxonomies à la ligne 32. Il permet de faire le lien entre mon type de contenu personnalisé et ma taxonomie personnalisée.

Voici la liste des paramètres autorisés par la fonction register_post_type.

Créer une Custom Taxonomy par le code (taxonomie personnalisée)

Les taxonomies sont aux catégories et aux étiquettes ce que les types de contenu sont aux articles et aux pages. Par analogie, il est donc possible de générer vos propres taxonomies personnalisées. Là encore, le générateur en ligne de chez GenerateWP va nous mâcher le travail bien que la compréhension des différents arguments disponibles reste essentielle.

Je reprends donc mon exemple avec mes biens immobiliers que je souhaite à présent classer par type (appartements, villas, maisons, châteaux, etc.). On parlera de terme pour évoquer chaque type créé au sein de votre administration.

function wpc_ct() {

/* Property Type */
$labels = array(
'name' => _x('Types', 'Taxonomy General Name', 'textdomain'),
'singular_name' => _x('Type', 'Taxonomy Singular Name', 'textdomain'),
'menu_name' => __('Types', 'textdomain'),
'all_items' => __('All Types', 'textdomain'),
'parent_item' => __('Parent Type', 'textdomain'),
'parent_item_colon' => __('Parent Type:', 'textdomain'),
'new_item_name' => __('New Type Name', 'textdomain'),
'add_new_item' => __('Add New Type', 'textdomain'),
'edit_item' => __('Edit Type', 'textdomain'),
'update_item' => __('Update Type', 'textdomain'),
'view_item' => __('View Type', 'textdomain'),
'separate_items_with_commas' => __('Separate types with commas', 'textdomain'),
'add_or_remove_items' => __('Add or remove types', 'textdomain'),
'choose_from_most_used' => __('Choose from the most used', 'textdomain'),
'popular_items' => __('Popular Types', 'textdomain'),
'search_items' => __('Search Types', 'textdomain'),
'not_found' => __('Not Found', 'textdomain'),
'no_terms' => __('No types', 'textdomain'),
'items_list' => __('Types list', 'textdomain'),
'items_list_navigation' => __('Types list navigation', 'textdomain'),
);
$rewrite = array(
'slug' => _x('type', 'property_type', 'textdomain'),
'with_front' => true,
'hierarchical' => false,
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => false,
'rewrite' => $rewrite,
'show_in_rest' => false,
);
register_taxonomy('property_type', array('property'), $args);
}
add_action('init', 'wpc_ct', 10);

Voici la liste des paramètres autorisés par la fonction register_taxonomy.

Corriger l’erreur 404

Vous devez obligatoirement mettre à jour vos permaliens via Réglages puis Permaliens dans votre back-office à chaque modification de votre architecture. Si vous oubliez cette étape, vous obtiendrez une page d’erreur 404.

Requêtes pour afficher vos Custom Post Types

Utiliser la template hierarchy de WordPress

Le système de modèles hiérarchique propre à WordPress s’appliquera de la manière suivante pour vos types de contenu personnalisé.

Nom du fichierExempleDescriptionURL
archive-CPT.phparchive-property.phpGénère la page d’archive reprenant les derniers contenus.https://example.com/property/
single-CPT.phpsingle-property.phpGénère la page du contenu unique.https://example.com/property/white-house-biarritz/

Et un tableau similaire pour les taxonomies personnalisées :

Nom du fichierExempleDescriptionURL
taxonomy-CPT.phptaxonomy-property_type.phpGénère la page d’archive reprenant les derniers contenus classés dans le terme concerné.https://example.com/type/villas/

Il vous faut donc créer le fichier correspondant selon vos besoins (présence ou non d’une page d’archive, liaison ou non avec une taxonomie).

Inclure les Custom Post Types sur la page d’accueil

Il vous suffit d’ajouter ces lignes de code, en-dessous des précédentes, dans le fichier functions.php :

function wpc_cpt_in_home($query) {
if (! is_admin() && $query->is_main_query()) {
if ($query->is_home) {
$query->set('post_type', array('post', 'property'));
}
}
}

add_action('pre_get_posts','wpc_cpt_in_home');

Inclure les Custom Post Types dans les résultats de recherche

Copiez ces lignes de code dans votre fichier functions.php de sorte que WordPress intègre vos différents contenus dans les résultats de recherche de votre site et pas uniquement les articles. Le type de contenu est à spécifier à la ligne 4 en ajoutant 'post' pour les articles. Vous pouvez également ajouter 'page' pour les pages standards si nécessaire.

function wpc_cpt_in_search($query) {
if (! is_admin() && $query->is_main_query()) {
if ($query->is_search) {
$query->set('post_type', array('post', 'property'));
}
}
}

add_action('pre_get_posts','wpc_cpt_in_search');

Récupérer les contenus via WP_Query

Si vous souhaitez récupérer les contenus n’importe où dans votre thème, il nous faut créer une boucle personnalisée de type WP_Query.

Pour effectuer une telle requête, utilisez les lignes de code suivante dans le fichier du thème responsable de l’affichage de la donnée. Cette technique est réservée aux développeurs.

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

$args = array(
'paged' => $paged,
'post_type' => 'property'
),
);

$the_query = new WP_Query($args);
?>

<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<?php get_template_part('template-parts/content', 'property'); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>

La ligne 6 doit être modifiée pour correspondre à l’identifiant de votre type de contenu personnalisé.

Un site WordPress bien optimisé disposera de cette architecture personnalisée avec les types de contenu et les taxonomies personnalisés. Bien maitrisé, ce concept vous permettra d’aller très loin dans l’utilisation du système de gestion de contenu qu’est WordPress, notamment sur la partie Search Engine Optimization (SEO). A cela, nous ajouterons les champs personnalisés non évoqués dans ce tutoriel.

Personnaliser les messages de notifications de vos types de contenus personnalisés

À chaque enregistrement de votre contenu, WordPress affiche une notice informative pour confirmer l’opération effectuée. Par exemple, si vous mettez à jour un article, le message suivant apparaît :

Cette traduction générique ne fonctionnera pas dans tous les cas

Vous pouvez filtrer ces messges avec ces quelques lignes de code :

function wpc_testimonial_updated_messages($messages) {
global $post;
if ($post->post_type != 'testimonial') return $messages;

$post_url = get_permalink($post->ID);
$post_url_esc = esc_url($post_url);
$post_url_pvw = esc_url(add_query_arg('preview', 'true', $post_url));

$messages['testimonial'] = array(
0 => '', // Unused. Messages start at index 1.
1 => sprintf(__('Testimonial updated. <a href="%s">View testimonial</a>', 'wpchannel'), $post_url_esc),
2 => __('Custom field updated.'),
3 => __('Custom field deleted.'),
4 => __('Testimonial updated.', 'wpchannel'),
5 => isset($_GET['revision']) ? sprintf(__('Testimonial restored to revision from %s', 'wpchannel'), wp_post_revision_title((int) $_GET['revision'], false)) : false,
6 => sprintf(__('Testimonial published. <a href="%s">View testimonial</a>', 'wpchannel'), $post_url_esc),
7 => __('Testimonial saved.', 'wpchannel'),
8 => sprintf(__('Testimonial submitted. <a target="_blank" href="%s">Preview testimonial</a>', 'wpchannel'), $post_url_pvw),
9 => sprintf(__('Testimonial scheduled for: <strong>%s</strong>.', 'wpchannel'), date_i18n(__('M j, Y @ G:i'), strtotime($post->post_date))),
10 => sprintf(__('Testimonial draft updated. <a target="_blank" href="%s">Preview testimonial</a>', 'wpchannel'), $post_url_pvw),
);
return $messages;
}
add_filter('post_updated_messages', 'wpc_testimonial_updated_messages');

Dans cet exemple, il vous faut remplacer testimonial par l’identifiant de votre type de contenu personnalisé déclaré précédemment via la fonction register_post_type. Pensez également à respecter la casse pour les chaînes de traductions.

Pour terminer, vous devrez mettre à jour le fichier de langues à l’aide du logiciel Poedit ou de l’extension Loco Translate pour opérer les traductions anglaises. Rappelons ici qu’il est fortement recommandé de coder en anglais.

Cela confère une touche plus professionnelle à votre back-office. C’est d’autant plus le cas lorsque les traductions originales sont trop éloignées du nom adopté pour votre type de contenu personnalisé.

Pour tester le bon fonctionnement du filtre, créez ou modifiez une publication et admirez le résultat.

Par Aurélien Denis

Consultant & Développeur WordPress / WooCommerce. Un site à créer, à maintenir ou à débuguer ? Contactez-moi.

113 commentaires
  1. saber

    bonjour,
    merci pour le tutoriel ,
    SVP comment faire pour afficher les category or staus directement : https://example.com/for-rent et non
    [ https://example.com/status/for-rent ]
    jai utiliser ce bout de code :
    ‘listing’,
    ‘paged’ => $paged,
    ‘posts_per_page’ => 9,
    ‘tax_query’ => array(
    array(
    ‘taxonomy’ => ‘status’,
    ‘field’ => ‘slug’,
    ‘terms’ => ‘for-rent’,
    ),
    ),
    ));

    // The Query
    $the_query = new WP_Query( $args );
    ?>
    ça pas marché ?
    merci

  2. Aurélien Denis auteur de l’article

    Les extensions mentionnées sont des aides pour vous faciliter la gestion en back-office. Search & Filter Pro par exemple filtre les éléments selon fonctions natives proposées par WordPress, c’est là encore une couche visuelle bien utile.

    1. cyril

      merci encore et c’est toute la question de savoir quelles sont les extensions qui sont des couches visuelles bien utiles (comme ACF donc) et celles qui se substituent à la logique native WP.

      Je comprends que Search & Filter Pro ne remplace donc pas WP_query

      Comme le sujet de cette page est la création de custom posts WP, que pensez vous de CPT UI ? est-ce une interface visuelle comme ACF (mais pour les custom posts) ou un remplacement ? Dit autrement est-ce que CPT-UI est une sorte de générateur de code mais intégré au backoffice de WP ?

      en vous remerciant

      cyril

      1. Aurélien Denis auteur de l’article

        Je vous invite à tester les extensions mentionnées mais je vous assure qu’elles respectent obligatoirement l’architecture de données de WordPress sans quoi elles ne fonctionneraient pas.

  3. Cyril Thibout

    Bonjour
    étant débutant sous WP quelque chose me chagrine : faut il utiliser cette méthode qui a l’avantage d’etre native ou faut il utiliser des plugins (et ils sont nombreux) pour creer ces types de contenus?

    Dans l’ecosysteme WP, une extension qui gere des evenements, ou une autre qui gere des documents à télécharger, cree t elle en fait des custom posts selon cette méthodhe ce qui tend à unifier tous les contenus du site dans un meme formalisme ? Ca serait l’approche drupal.
    Dans le cas contraire on se retoruve avec des extensions qui vivent chacune leur vie de façon séparée et ce serait l’approche Joomla.

    car la multiplication des plugins pour la creation de CP est un peu inquietante. CPTUI par exemple n’est pas juste une interface graphique sur les CP natifs de WP mais un total remplacement. Comment dès lors assurer une interopérabilité entre les développements ?

    merci

    cyril

    1. Aurélien Denis auteur de l’article

      Très bonnes questions !

      Je préconise toujours de créer vos types de contenus personnalisés à la main sans passer par une extension tierce. C’est inutile et cela ajoute une dépendance de plus, là où les générateurs en ligne permettent de faire cela simplement.

      Concernant les extensions qui embarquent des types de contenus, ils reposent bien entendu sur l’architecture WordPress. Ce respect des standards donne par exemple la possibilité au développeur de faire des WP_Query sans difficultés.

      1. cyril

        Bonjour

        merci pour cette réponse qui m’éclaire mais si vous permettez :

        1- qu’en est il des custom fields : la même question apparait : nativement ils sont stockés dans la table wp_postmeta mais l’usage très répandu d’ACF (ou d’autres) modifie ce stockage. Dès lors comment parler d’approche générique? comment peut on faire des WP_Query si le stockage change selon l’approche ?

        2- je vois que la suite ToolSet, à l’opposée de l’approche 100% code, est capable de proposer un tableau de bord qui liste tous les custom posts et custom fields qu’ils soient créés par toolset ou d’une autre façon. D’où vient cette magie ?

        merci pour vos réponses.

        1. Aurélien Denis auteur de l’article

          ACF repose entièrement sur les champs personnalisés de WordPress, il ajoute “seulement” une interface utilisateur et des fonctions PHP pour simplifier les requêtes. On peut très bien utiliser les fonctions natives sur les champs personnalisés. C’est donc 100% respectueux des standards.

          Je ne connais pas bien ToolSet, je préfère bosser sur ACF.

          1. cyril

            ah, ok c’est plus clair merci !
            reste alors la question du requetage: Faut il créer ses Listes et filtres de recherche avec FacetWP , Search & Filter ou tout faire à la main avec WP_query() ?

            encore une fois quelle est l’approche la plus propre pour un développeur ?

            merci

            Cyril

  4. Bertrand

    Bonjour,
    Tout d’abord merci pour votre blog, qui m’as permis d’aller vraiment plus loin dans l’appréhension des cpt.
    Mon problème est le suivant, j’ai créé mon cpt, avec différents termes de taxonomie et rajouté la fonction sticky sur ces derniers.
    Seul problème et pas des moindres je ne parviens pas à les afficher sur la page d’accueil.
    Celle-ci est une page d’accueil statique sur laquelle je souhaite afficher: 1 . les 5 derniers cpt, 2. les 5 derniers articles de blogs.
    J’ai ajouté :

    function affichage_cpt($query) {
    if ($query->is_home)
    $query->set( ‘post_type’, array(‘ficheproduit’,’posts’) );
    }
    add_action(‘pre_get_posts’, ‘affichage_cpt’);

    malheureusement ça remplace le contenu des articles de blogs, ce que je ne souhaite pas. Mon objectif est d’avoir le thumbnail + résumé des cpt puis dans une autre section ceux du blog, de manière bien distincte
    Du coup là je rame bien, je sais que le post est ancien mais si toutefois vous pouviez m’aider, merci d’avance

    1. Aurélien Denis auteur de l’article

      Bonjour Bertrand, il te faut utiliser une fonction de type WP_Query pour créer une boucle personnalisée distincte de la boucle principale qui affiche tes articles. Pour info, la fonction pre_get_posts filtre en amont la boucle principale (sauf mention contraire), le comportement obtenu est donc normal.

      Tu peux passer par un générateur en ligne : https://generatewp.com/wp_query/

      1. Bertrand

        Bonjour Aurélien, merci pour ta réponse.

        J’ai mis ce code avant l’affichage des posts et ça fonctionne (avant ça m’envoyait une boucle à l’infini), directement dans front-page.php. Maintenant il me reste à faire le tri dans les articles du blog (pour n’afficher que ceux là, puis à n’afficher que les sticky posts pour mes CPT (là à mon avis ça va être plus chaud)

        1. Bertrand

          le code :
          if ( post_type_exists(ficheproduit) ) :
          query_posts(‘cat=16,17&showposts=4’);
          while (have_posts()) : the_post();

          get_template_part( ‘template-parts/post/content’, ‘monformat’ );

          endwhile;
          endif;

  5. turenne

    Peut on faire la même chose avec les pags au lien des posts ?
    Merci

    1. Aurélien Denis auteur de l’article

      Je n’ai pas compris votre question…

  6. Elly

    Bonjour,

    Merci pour ce tuto très utile!
    Maintenant comment mettre en forme ce custom post à l’affichage? En effet, cela ne rend pas forcément très esthétique.

    1. Aurélien Denis auteur de l’article

      Il vous faudra développer votre propre thème pour accomplir cela.

  7. Akro Web

    Bonjour,

    J’ai créé sur un site un custom post type qui regroupe des docs, photos, actus…
    Je voudrais que cet espace sur mon site soit privé : accès au différent contenu de ce custom post type via un identifiant et mot de passe unique.
    Est ce que c’est possible de réalisé un espace privé pour ce custom post type via un plugin ?
    Merci

  8. BENJAMIN PIRON

    bonjour,
    tutoriel très utile,
    simple petite question:
    les cpt peuvent ils proposer une date dans les champs?
    voire meme plusieurs dates?
    j’ai besoin de lier des articles à un intervalle de date, comme pour indiquer que mon post, passé telle date, n’est plus valide, est périmé.
    je m’explique: j archive des textes de lois de façon chronologique.
    l amendement ‘xxx’ indique que la loi sur l’immobilier permet tel et tel type de chose, mais a compter de tel date, la loi change, et plus tard encore, a nouveau.
    l ‘article de loi subit donc des modifications avec le temps.
    donc j ai besoin que mon custom post type propose un intervalle de date pendant lequel mon amendement a été effectif.
    ainsi si je fais une recherche sur le site pour un amendement categorie: ‘loi sur l’immobilier’, de tel date a tel date, ma page de résultat affiche: uniquement les amendements qui et les modifications qui me disent qu’entre telle dat et telle date seule ces choses étaient légales. pas ce qui est hors date!
    merci de m’aider. j’ai un peu trifouillé d’autres solutions que cpt, mais je crois que je dois me trouner vers cette solution car l’enjeu de ce projet est de pouvoir insatller une barre de recherche multicritere qui puise dans ma base de donnée et sans erreur de résultat!
    bonne réception

    1. Aurélien Denis auteur de l’article

      Le CPT servira ici pour stocker les textes de lois. Ensuite, il vous faudra utiliser les champs personnalisés à l’intérieur des contenus (pour faire des liaisons par exemple) et des requêtes personnalisées de type WP_Query pour afficher cela dans votre thème.

  9. olivierjp80om80

    Bonjour et merci pour l’article
    Mon site a un custom post types vidéo et je voudrais afficher le bloc Champs personnalisés qui apparaît dans articles et dans page mais pas dans ma section vidéo c’est possible?
    SI oui comment faire.
    Merci de m’aider.

    1. Aurélien Denis auteur de l’article

      En haut à droite, Options de l’écran puis cochez Champs personnalisés.

  10. Ionut

    Hey Aurélien,

    I was doing some research and looks like this articles is getting some good traffic so is a shame that you didn’t showed him some love since 2010 :). While you have focused on the coding part, we just wrote an article about different existing solutions : http://www.codeinwp.com/blog/top-custom-post-types-plugins-for-wordpress/ ( which is something that I saw in comments here that people are looking for ), let me know if you think those tools might be interesting for your audience.

    Thanks!

    1. Aurélien Denis auteur de l’article

      Nice post, it was great to meet you at WordCamp Paris !

  11. max

    Bonjour ! alors j’ai suivi votre tuto donc tout fonctionne alors mes custom post s’affiche bien grace a la boucle mes impossible de les “stylisé”
    et j’aurai aimé les modifier mes impossible d’ajouté une “class” si vous pouvez m’aider merci 🙂

  12. Erwan Tanguy

    Bonjour !
    J’ai un problème avec une pagination sur des custom post types qui ne fonctionne que si les permaliens sont en numérique – ce qui ne m’intéresse pas pour les aujtres articles que je voudrais en /%postname%/ !
    Les pages des custums posts fonctionnent bien mais sur une page générée avec un template, une boucle affiche par ordre alphabétique toutes les entrées. Je veux qu’il y ait une pagination chiffrée pour le moment (alphabétique si je trouve la solution à cet autre problème). Celle-ci s’affiche bien mais ne fonctionne que si le permalink est en mode numérique.
    Si vous avez une solution et le temps, merci…

    1. Aurélien Denis auteur de l’article

      Si vous faites une WP_Query, alors regardez dans le codex à la section pagination. 😉

      1. Erwan Tanguy

        J’ai testé aussi et ça ne fonctionnait pas. Le problème s’est régler que j’ai changer l’appellation de ma page (avant titre « Annuaire » et permalien « annuaire » et maintenant « Annuaire » et permaliens « annuaire-des-adherents »). Pour cette page, j’utilise query_posts( ‘post_type=annuaire&order=ASC&orderby=title&showposts=10&paged=’.$paged ); et ça fonctionne. Par contre pour les templates taxonomy, je passe par WP_Query car sinon la pagination m’affiche bien la première page puis un adhérent par page pour la suite…

        Merci pour votre article et votre réponse même si j’avais trouvé une solution juste avant.

  13. LinusMinus

    Je vais y jeter un coup oeil 😉

    Merci !

  14. LinusMinus

    Bonjour,

    Merci pour cet excellent article bien riche sur les CTP.

    Je travail actuellement sur un projet dans le theme du voyage et je développe sous WordPress, je souhaite afficher une liste d’articles avec quelques détails ( courte description, prix, situation, services) ainsi chaque aperçu de ces articles mène vers une page (le vrai article complet) avec plusieurs champs (description longue, situation sur la carte, adresse, mini galerie etc…).

    Ma question est : dois-je creuser dans cette piste des Custom post types et custom post fields ? Si ou y a t-il des tuto pour pouvoir réaliser ce que j’ai évoqué ci-dessus ?

    Merci encore une fois pour cette introduction et le lien de la section En savoir plus !

    1. Aurélien Denis auteur de l’article

      Les CPT et les champs personnalisés (custom fields) constituent la pierre angulaire de tout projet WordPress. Donc oui ! Regardez du côté de ACF PRO.

  15. youal

    Merci pour cet article qui m’a aidé à créer et surtout à afficher mes CPT. Seulement, il me reste encore un truc que je trouve pas ici. Au fait, j’ai crée mon CPT sous forme d’un plugin (je dis bien sous forme d’un plugin, pas à l’aide d’un plugin), et du coup je me demande où mettre les deux fichiers archive-$cpt.php et single-$cpt.php.
    Merci de m’aider.

    1. Aurélien Denis auteur de l’article

      Les fichiers archive et single sont à mettre dans le thème. 😉

  16. Fabien

    Bonjour, j’ai mis en place des customs post type et des taxonomies supplémentaire sur un site wordpress en local. Je cherche une solution pour pouvoir régler indépendamment le nombre à afficher par page pour chacune d’elle. Car par défaut l’affiche du nombre dépend de “réglage” -> “lecture” ->”nombre d’article à afficher par page”.
    Merci d’avance si vous avez une solution et merci pour votre travail que vous partagez avec nous.
    Cordialement.
    Fabien.

  17. xflr350

    Bonjour, Je viens tard sur le sujet mais je te remercie pour cet article.

    Alors je suis tombé non pas sur une erreur de code mais sur un problème de lien 404
    En fait j’ai créé mon custom post “concert” et lors de la création d’un article, le lien me donne http://localhost/concert/mon-article-que-jai
    et paf Erreur 404 !

    le lien court fonctionne mais pas l’adresse complète.

    En cherchant un peu, j’ai vu qu’il fallait ajouter la ligne de code “flush_rewrite_rules();” juste après register_post_type(…) et là plus d’erreur 404

    Cela donne :

    add_action( ‘init’, ‘create_post_type’ );
    function create_post_type() {
    register_post_type( ‘concert’,
    array(
    ‘labels’ => array(
    ‘name’ => __( ‘Concerts’ ),
    ‘singular_name’ => __( ‘Concert’ )
    ),
    ‘public’ => true
    )
    );
    flush_rewrite_rules();
    }

    Voilà, c’est mon retour de l’utilisation de ce tips sur un wp 4
    Si cela peut aider 🙂

    x

    1. Aurélien Denis auteur de l’article

      Le bug de 404 à la création d’un CPT est normale : il faut toujours mettre à jour ses permaliens depuis le back-office. L’astuce que vous indiquée n’est pas conseillée dans la mesure où cela va mettre à jour les permaliens à chaque exécution… 🙂

      1. xflr350

        Tu as raison. Je ne connais pas trop wp alors j’apprends 🙂
        Dans l’article tu aurais quand même dû en parler car effectivement n’étant pas expert, je suis tombé sur ce cas et j’ai dû trouver une solution qui n’était pas idéal (je lirai mieux la prochaine fois)

        X

        1. Aurélien Denis auteur de l’article

          C’est une bonne remarque d’autant plus que cet article est partiellement obsolète ou du moins incomplet depuis sa date de création.

  18. Jonathan

    Bonjour,

    J’ai deux questions :
    Aprés ma boucle CPT dans la boucle de ma page
    $loop = new WP_Query( array( ‘post_type’ => ‘movie’, ‘posts_per_page’ => 10 ) );
    while ( $loop->have_posts() ) : $loop->the_post();
    the_title();
    echo ”;
    the_content();
    echo ”;
    endwhile;

    Le contenu de la première boucle ne s’affiche plus. Par exemple :

    Ma deuxième question est d’avantage sur un foreach avec un CPT, le code suivant ne donne rien :
    $post_types = get_post_meta( get_the_ID() , ‘movie’ );

    foreach ( $post_types as $post_type ) {

    echo ” . $post_type . ”;
    the_title();

    Merci par avance

    1. Aurélien Denis auteur de l’article

      Il ne faut pas oublier le wp_reset_postdata pour ta boucle.

      Pour le second je ne sais pas comme cela, il faudrait que j’y passe du temps que je n’ai pas…

  19. bjmdrx

    Merci pour le lien “Pour en savoir plus ” –> il est au poil! 🙂

  20. MC

    Bonjour,

    Merci pour ce tuto très clair cependant si je souhaite créer deux Custom Post différents il semble y avoir un conflit au niveau du fichier function.php (syntax error, unexpected ‘add_action’ (T_STRING))

    Une solution?

    Merci.

    1. Aurélien Denis auteur de l’article

      Il ne faut pas répéter certaines lignes oui… je recommande d’utiliser un générateur en ligne comme generatewp.com.

  21. ML

    Bonjour !
    Je n’ai pas encore mis les mains dans le cambouis WordPress au-delà de l’installation sur un serveur local, et pour le moment je réfléchis encore à ce que je veux faire / ce qu’il est possible de faire avant de me lancer. Aussi, j’ai une question de faisabilité : je souhaite créer essentiellement un blog de cuisine, et publier les recettes à la fois en anglais et en français. Est-il possible, à l’aide d’un Custom Post Type qui correspondrait aux posts en anglais, d’afficher uniquement les articles en français sur la page d’accueil et dans les résultats de recherche (par catégorie, date ou mot-clef) et d’afficher les articles en anglais sur une Page dédiée ?
    Merci !

    1. Aurélien Denis auteur de l’article

      Pour une gestion multilingue, il vous faudra installer un plugin comme WPML (premium).

  22. Novakissime

    Bonjour,
    Je suis face à un problème sur mon site internet, je souhaite faire un site de petites annonces , je souhaite que mes membres déposent des annonces mais je vois que sur wordpress on peut poster des articles en choisissant une catégorie mais je souhaite que mes membres puissent poster des annonces avec deux catégories à la fois. Je ne vois pas comment faire, sur wordpress on peut créer plusieurs catégories mais on peut qu’en choisir une lors de la création du post par le membre, je souhaite que le membre puisse en choisir une et une autre a la fois. Par exemple un site de petites annonces immo avec une annonce type de bien (catégories maison/appartement/terrain…) et localisation (catégories Paris/Lyon/Marseille..)

    Je ne sais pas comment faire pouvez vous m’aider?
    Cordialement

    1. Aurélien Denis auteur de l’article

      On peut très bien créer un site de petites annonces avec WordPress mais il faut connaitre les notions de custom post type et de custom taxonomies ainsi que les procédures de soumission en front par les membres. Bref, du développement à prévoir ! 😉

      1. Novakissime

        Merci pour votre réponse, existe il un tutoriel pour faire cela? Notamment pour le soumission d’un formulaire en front?

        1. Aurélien Denis auteur de l’article

          Pas sur ce blog, mais sur des sites anglo-saxons ça doit se trouver. Plusieurs solutions existent dont certaines en payant.

  23. h

    Bonjour,

    Je cherche à créer un post type qui aurait, dans la partie contenu, du texte statique (que l’on retrouverait sur tous les articles). L’idée étant de pouvoir spécifier des champs, dans le contenu de l’article et dans le titre qui viendrait recevoir les informations contenus dans un tableau excel *.csv. (importé via Ultimate CSV importer).

    Grosso modo, je souhaiterais que chaque article que je crée contienne le texte suivant avec des champs qui correspondent à plusieurs lignes du tableau excel.

    C’est difficile à expliquer. Voici un ex :

    “L’article n° [colonne 1 du tableau excel], est conforme suivant l’odre [colone 2 du tableau excel], [colone 3 du tableau excel] datée du [colonne 4 du tableau excel].

    Vers quoi dois-je me diriger, un plug in en particulier ?

    Merci infinement

    1. darkjerk

      Bonjour,

      Je recherche depuis de nombreux jours à cibler mon problèmes et peut être que les CPT sont la solution que je recherche…

      Je voudrais savoir comment faire pour relier une catégorie à des posts ( rien de très compliqué vous allez me dire), mais je veux faire quelque chose de précis, voir l’exemple :

      http://www.mojo-themes.com/item/wiksi-responsive-magazine-wordpress-theme/demo/?r=wpthemesspot

      Juste en dessous du slider, la catégorie “Nature” rassemble les 5 derniers articles de cette dernière. Je voudrais simplement faire la même chose.

      Merci par avance de vos réponses 🙂

  24. Mart

    Bonjour, Je sais pas si je suis a la bonne place je recherche comment faire un Filtre de recherche Proprieté ID ( Seach ID Propriety ) pour un site web d’une agence immobiliere.

    Je veut rechercher ID de la page consernant l’annonce immobiliere avec un filtre de recherche ID sur la page d’accueil.

    Example: Je entre 125 dans la case recherche et sa me donne la page de l’annonce que le client a inserer.

    Ma question est comment faire ce filtre de recherche ?

    Je fonctionne avec wordpress la derniere version et un theme immobilliere.

    Merci !

    1. Aurélien Denis auteur de l’article

      Cela peut faire l’objet d’une prestation commerciale.

  25. Dave Portois

    Bonjour,

    Super ce tuto ! J’ai enfin pu créer les types que je voulais.

    Cependant j’ai une petite question:
    Est-ce possible de créer un custom post type ayant un TITLE, un petit texte EXCERPT et plusieurs attributs INT ?
    Car je souhaite créer plusieurs produits, et les internautes pourront remplir un formulaire pour chaque produit, par exemple : facilité d’utilisation, rapport qualité prix, etc.
    Je souhaite donc que chaque produit possède un attribut rapport qualité prix qui serai une note sur 3, un attribut facilité d’utilisation (une note sur 3) et enfin une note générale.

    Merci d’avance et encore bravo !

    1. Aurélien Denis auteur de l’article

      Avec des custom fields et des metaboxes oui !

  26. Kevin Py

    Merci pour cet article intéressant, la puissant des CPT permet vraiment de grandes choses. Mais je crois avoir trouver une de ses limites.
    Dans mon fichier functions.php, je créer un input pour mon CPT, qui donne des informations annexes. Tout marche très bien dans la page dédié au CPT, car l’URL affiche l’ID du CPT en question.
    Mais lorsque je souhaite utiliser la valeur de l’input (une URL externe) dans le listing des CPT (en l’occurence mes projets), c’est l’URL sur laquelle je me trouve qui est pris en compte. Je n’arrive pas à utiliser des valeurs sans avoir l’ID du CPT.

    Je cherche la réponse à ce problème, et après avoir consulté différents tutos sur les CPT, je me suis dis que je ne risquait rien à poser la question à quelqu’un qui m’a l’air de maitriser les CPT ;).

    PS: J’ai créer 2 snippets pour montrer mon code.
    1 – functions.php : http://snippi.com/s/wz9e0h4
    2 – portfolio.php : http://snippi.com/s/7hnriu0

    Merci d’avance pour ta réponse.

    1. Aurélien Denis auteur de l’article

      Le template du portfolio est constitué d’erreur. Pas de reset postdata à faire en début de fichier et pas forcément utile de créer un modèle de page.

      Par défaut, il faut créer un archive-cpt.php puis faire un lien personnalisé dans le menu. Le slug dépend du code du Custom Post Type selon que l’on utilise des règles de réécriture ou pas.

      Pour ajouter des champs, utilises le plugin ACF qui fait ça très bien ! 😉

    1. Aurélien Denis auteur de l’article

      Corrigé ! 😉

  27. cou

    Bonjour, merci pour ce tuto très instructif !
    Cependant j’ai un petit soucis: J’ai créé un custom post ’emplois’ et j’aimerais grace au plugin ‘wp user fronted’ permettre a mes utilisateurs de poster directement des articles dedans. Mais impossible, quand quelqu’un créé un article ca le place directement dans les articles normaux et non dans ’emplois’ … Pouvez vous me renseigner la dessus?

    1. Aurélien Denis auteur de l’article

      Je ne connais pas ce plugin… mais je sais qu’un plugin premium comme Gravity Forms le fait très bien en le couplant à d’autres plugins spécialisés.

  28. Clément

    Bonjour, je découvre de plus en plus de technique pour améliorer mes prochains sites, j’aurai une question, j’ai fais pas mal de recherche mais je ne trouve pas ma réponse. J’explique:
    J’ai créé des customs post type et des taxonomy associé, toutes mes pages fonctionnent impeccablement bien, mais pour améliorer certaines de ces pages, je cherche à mettre sur un custom post d’une certaines taxonomy, les 4 derniers posts de cette taxonomy en bas du post. Connaissez vous le moyen de le faire ?
    je m’explique un peu mieux:

    Posttype1
    Taxo1
    Taxo2
    Taxo3

    Posttype2
    Taxo1
    Taxo2

    Posttype3
    Taxo1
    Taxo2

    quand je regarde un post de posttype3 qui a pr taxo, le n°1 et le n°2, j’aimerai qu’a la fin de ce post, il y est un résumé des 3 ou 4 derniers posts présent dans la taxo1 ou taxo2.

    J’espere que je me suis fais comprendre ^^
    Merci d’avance!

    1. Aurélien Denis auteur de l’article

      En gros afficher les derniers contenu d’un Custom Post Type (commun avec la page en cours de visite) et en filtrant par taxonomie selon que l’on est dans Custom Post Type 1 / 2 / 3 ? Si oui, faut créer 3 boucles PHP pour les afficher et gérer le tout avec des conditions ou avec 3 fichiers de template : single-cpt1.php / single-cpt2.php / single-cpt3.php. 😉

      1. Clément

        Merci pour votre réponse, en fait, ce que je cherche, c’est d’avoir des articles en rapport avec les custom taxonomy, et non pas avec les custom post type.
        dans une boucle query_post par exemple, je vais avoir query_posts(‘post_type=musique&showposts=8&PROBLEME=top-50’); while (have_posts()) : the_post();

        je cherche à savoir quel est l’expression qu’il faut mettre au niveau du PROBLEME, j’ai essayé category,tag,tag__in,tag_id (en changeant top-50 par l’id) mais rien n’y fait.
        Avez vous la solution ?
        merci d’avance !

  29. Jeudy

    Bonjour j’ai suivi le tuto mais après avoir ajouté

    add_filter( ‘pre_get_posts’, ‘my_get_posts’ );

    function my_get_posts( $query ) {
    if ( is_home() )
    $query->set( ‘post_type’, array( ‘dossier’ ) );

    return $query;
    }

    sur ma page d’accueil il n’y a plus que mon custom post type , il n’y a plus mes articles :s

    1. Aurélien Denis auteur de l’article

      Rajoutes ‘posts’ dans ton array(‘dossier’,’posts’) ça affichera aussi les articles en principe.

      1. jeudy

        effectivement ça marche mais c’est pas(‘dossier’posts’) mais ‘post’ 😉 merci beaucoup. j’ai une question c’est possible de lier les category des custom posts avec un article ou vis versa ?

  30. Dém

    Bonjour, en voila une fonction interessante.

    J’ai déclaré dans mon function.php 2 CPT différents et cela fonctionne parfaitement dans l’interface d’admin mais j’ai du mal à les lister.

    En effet la ou je voudrais ne lister qu’un seul CPT j’ai chaque fois le contenu de mes 2 CPT qui s’affichent sur le site.

    J’ai utilisé cette query:
    query_posts(‘post_type = news’);

    news étant le nom d’un de mes 2 CPT, comment ne lister que celle-ci?

    Merci!

    1. Dém

      je n’ai malheureusement toujours pas su résoudre mno problème :s

  31. Kayl

    Bonjour, merci tout d’abord pour cet article de qualité.

    J’aurais une question. J’ai crée des custom post types grâce à votre article et ajouter le code demandé dans functions.php afin de pouvoir lister mes custom post type sur mon blog. Une fois fait, cela s’est en effet listé mais il y a une interaction avec mon menu: il perd son style.

    J’ai remarqué que mon ul menu perdait son id etc c’est pourquoi il perd son style. Je précise que j’utilise le menu wordpress et la ligne de code qui me sert à afficher mon menu est celle-ci ::

    Si quelqu’un sait pourquoi cela fait bugger l’affichage de mon menu, ca serait très gentil de m’en faire part !
    Merci

    1. Aurélien Denis auteur de l’article

      Les menus disposent de nombreux paramètres (cf. Codex) qui permettent de gérer les ID et les classes CSS facilement. 😉

      1. Kayl

        oui bien sûr et j’avais mis une ID à mon menu, il était stylisé, tout se passait bien jusqu’à ce que je mette dans mon fichier functions.php le bout de code qui permet d’afficher le contenu de mon custom post type sur mon blog, mais je ne sais vraiment pas pourquoi ca ne fonctionne plus depuis, c’est essentiel que je trouve…

        1. Kayl

          Hum jai reglé mon problème en définissant ma page d’accoeuil dans les réglages WordPress (j’avais remarqué que le menu s’affichait correctement sauf sur la première page du site). 🙂

  32. jonakangou

    bonjour,

    intéressant les custom post type (CPT) mais comment lier ces CPT entre eux et ensuite à des post classique ?

    Exemple : on créer un site sur le cinéma dans ce site il y a trois CPT : film, acteur et réalisateur. Comment faire le lien pour dire “Star Wars épisode 1 “(CPT film) a comme acteur “truc” “machin” et “bidule” (plusieurs CPT acteur) ainsi que Speilberg comme réalisateur (CPT réalisateur) .

    Ensuite en supposant que l’on fasse une section “news”, ça peut être intéressant dans le back office de faire des liens. Quand on crée une news sur “Star wars” de lier cette news au CPT Film pour dans le front office afficher des liens vers le film, les acteurs et le réalisateur en bas de la news. Sous réserve bien sûr que une fois lié au CPT film de base le lien avec les différents custom post type -> CPT acteur et le CPT réalisateur se fasse automatiquement.

    J’ai pris le cas d’un site de film mais le mécanisme est valable pour bien des sujets.

    J’ai cherché parmi des plug-in wordpress. Certains s’en approche mais aucun ne fait un lien de cette nature pourtant si simple d’un point de vue conceptuel. Plus complexe niveau programmation j’en conviens.

    Si un de vous à une piste à fournir, je suis sûr que je ne dois pas être le seul à avoir ce genre de réflexion sur les CPT.

      1. Jonakangou

        Merci pour l’info. As tu un lien vers une vidéo explorant les fonctionnalités de ce plug-in ?

        1. Aurélien Denis auteur de l’article

          Non désolé ! Peut-être sur YouTube…

    1. jibeo

      Avec l’extension “Custom Content Type Manager” tu peux lier les différents CPT !

    1. Aurélien Denis auteur de l’article

      Merci du partage ! 😎

  33. BlacksAngel

    Et Si j’ai deux custom post type comment les afficher sur la page index ??

    1. Aurélien Denis auteur de l’article

      En créant une 2e boucle avec la fonction get_posts (cf. codex). 😉

  34. Giova

    Bonjour.

    Tout d’abord merci pour ce site, on y trouve plein d’infos interressante, un vrai plaisir !

    Durant votre vidéo, vous dite qu’il est possible de modifier la page d’édition de notre custom type, et que vous donnerez un lien en fin de tutoriel.

    Je ne vois qu’un lien qui reprend le contenu de votre tuto, mais rien sur la modification des pages d’édition. Où ce trouve ce fameux lien svp?

  35. Co_oD

    Bonjour et merci pour ce tuto très instructif !!

    J’ai une petite question à poser… J’espère que quelqu’un pourra m’aider.
    Est-il possible d’insérer un CPT sur la page d’accueil, et de lister les “posts conventionnels” ensuite…
    Je souhaite en fait insérer un “contenu” éditable qui reste toujours en 1ère position et sur lequel je n’aurai pas d’excerpt..

    Voilà le truc bien complexe… à moins qu’un plugin le fasse déjà ?
    Merci à vous 😉

    1. Aurélien Denis auteur de l’article

      Oui on peut afficher les custom post types de la même manière que les articles ou les pages via la boucle de WordPress. Tout ceci fonctionne de façon identique à la différence que les types de contenus sont différents.

      Maintenant, je n’ai pas de solutions via un plugin et il va falloir mettre les mains dans le code… en créant une première boucle pour ton CPT et une seconde pour tes articles. Je n’ai pas de tutoriel là-dessus par contre…

  36. denis

    Je voudrais qu’on puisse lors de l’édition d’un post distribuer les textes dans differents parties/paragraphes, du style “Où”, “Quoi”, “Comment”. Les custom-post-types sont-ils recommandés ou l’application de style suffit ?

  37. cayoul

    Afin d’éviter d’avoir un problème de headers already sent, il faut éviter de faire suivre une balise fermante et une balise ouvrant de php. Si vous fermez une balise pour la rouvrir derrière, autant ne pas la fermer.

  38. gdtsb

    Même souci que Vivien, simplement résolu en fermant correctement les balises php du fichier functions.php

  39. vivien

    a priori non, j’utilise category order (pour modifier l’ordre des categories), portfolio slideshow (un slideshow pour les img du post) et WP dTree (menu deroulant).
    Je vais essayer de desactiver les plugin.

    1. vivien

      meme desactiver j’ai toujours ce probleme… Que signifie ce message d’erreur?

      1. Aurélien Denis auteur de l’article

        Généralement, ce genre de messages signifie qu’il y a un doublon de fonctions PHP.

        Je ne suis pas spécialiste PHP mais comme indiqué les informations ont déjà été envoyées dans pluggable.php qui est donc relatif aux plugins.

        Ton fichier functions.php contient également peut-être un doublon de fonctions.

        1. vivien

          Merci, je vais essayer de me débrouiller.

  40. vivien

    Tout d’abord merci pour ces inforamtions, à priori cela fonctionne chez moi mais à chaque fois que je mets à jour où que je publie un de ces posts j’obtiens le message d’erreur suivant (qui n’empeche pas la publication)

    Warning: Cannot modify header information – headers already sent by (output started at /home/vivienur/public_html/ADF/wp-content/themes/ADF2/functions.php:6) in /home/vivienur/public_html/ADF/wp-includes/pluggable.php on line 890

    D’où cela peut-il venir? Merci

    1. Aurélien Denis auteur de l’article

      As-tu un plugin qui propose le même genre de fonctions pour gérer les custom post types ?

  41. Hassen

    Salut Aurélien,

    Super Tutoriel, bravo pour l’effort de pédagogie 🙂
    ma config : wp 3.0.3, Thème: Regulus, en Local

    1 – Je voudrais afficher mon Custom Post dans une page que j’ai créé spécialement. Je m’excuse, mais je ne sais toujours pas comment faire…
    2 – Les Post s’affichent sur ma Home page sans problème mais au niveau des Meta, les catégories créées ne s’affichent pas.
    j’ai juste ceci :
    “Publié par NomAuteur in : , commentaires fermés , éditer le billet”

    PS: Sereait-il possible que notre hôte nous communique le nom du plugin qu’il utilise pour les commentaires ? 😉
    Merci

    1. Aurélien Denis auteur de l’article

      Bonjour !

      Pour répondre à ta première question, as-tu tenté d’utiliser les codes fournies dans l’article ? Ce sont ceux du codex WordPress, ils doivent fonctionner.

      Pour la seconde question, sans doute une erreur dans le code.

      Pour ton P.S : je n’utilise pas de plugins pour les commentaires… 🙂

      1. Hassen

        Merci pour ta réponse même si ça ne m’avance guère 🙁

        1. Aurélien Denis auteur de l’article

          Désolé mais je ne fais plus de support approfondi au cas par cas… ça me prend trop de temps ! :p

          Pour cela, rendez-vous sur le forum de WordPress francophone.

  42. truc

    merci pour votre tutoriel

    est-il possible d’insérer des shorts codes
    dans les champs personnalisés ?

    1. Aurélien Denis auteur de l’article

      Non je ne pense pas…

  43. DJib's

    Merci pour cette news qui me sera très utile.

    Pouvez vous m’indiquer quel logiciel pour mac vous utiliser dans l’un des screnshots pour éditer du code

    1. Aurélien Denis auteur de l’article

      J’utilise le logiciel Coda pour MacOS X mais n’importe quel éditeur de texte conviendra. 😉

      1. Pierre Mouret

        Moi j’utilise un gratuiciel équivalent sous windows : PSPad il édite aussi les fichiers en FTP.

        1. Aurélien Denis auteur de l’article

          Merci de l’info ! 😉

        2. Aurélien Denis auteur de l’article

          Merci de l’info !

          Cela dit, la plupart des clients FTP classiques le font aussi mais c’est une option méconnue…

  44. Tendance Geek

    J’ai voulu tester sur un site en local avec WAMP, je n’ai aucun problème avec l’ensemble du blog. Avec cette fonction, je peux créer, pour garder ton exemple, une couleur, l’associer à un produit (articule créé) etc. Par contre, je ne peux pas afficher le dit produit, j’ai une erreur 404, or, si je regarde mes archives, il apparaît bien et il peut même récupérer le contenu de l’article. C’est seulement si je vais sur le permalien en fait.

    A défaut d’idée, je testerai sur mon site directement mais c’est quand même bien embêtant de travailler un si formidable outil directement sur son site, toucher le functions.php en direct, c’est pas franchement le truc que je conseillerai à tout le monde… Du moins si l’on veut que nos lecteurs se sentent bien :p

    1. Aurélien Denis auteur de l’article

      C’est sans doute une erreur de configuration de permaliens. Peut-être que ton serveur local ne gère pas la réécriture des URLs.

      1. Tendance Geek

        C’est ce que je me suis aussi dit, c’est amusant ceci dit que je n’ai aucun problème de permaliens avec les articles et les pages.

        1. Pierre Mouret

          Bonjour,

          Parfois il suffit de re-enregistrer le réglage des permaliens dans l’admin. de WordPress et tout rentre dans l’ordre …

          Merci pour le tuto !
          ça vas bien m’être utile !

  45. Forge

    Bonjour et merci pour cet article.

    Justement je ne trouve pas ce que je cherche concernant ces CPT.

    Comment faire en sorte que l’on puisse cliquer sur les données affichées par ce moyen, comme sur ma homepage (code postal, pays) et n’afficher que les posts ayant les mêmes valeurs.

    Merci de votre attention

    1. Aurélien Denis auteur de l’article

      Un tutoriel se doit de rester généraliste pour toucher le plus grand monde. Dans le cadre d’un développement spécifique, il vaut mieux faire appel à un spécialiste ou passer par un forum. 😉

Laisser un commentaire