Créateur de thèmes WordPress :: Formateur :: Web Designer

WordPress :: Organiser les « Custom Post Type » comme des dossiers

Publié le : 

Modifié le : 

Par : 

Dans ce tutoriel, je ferai référence à un projet web en cours où il s’agissait de créer une série de FAQ sous la forme de “Custom Post Type”. Le challenge consistait à rendre l’organisation des questions/réponses facile à classer dans l’administration de WordPress.

Je me suis donc arrangé pour classer les éléments par dossier en utilisant une hiérarchie de type page et deux plug-ins pour réorganiser plus facilement l’ordre des FAQ.

Evidemment, il est possible d’appliquer ces principes à d’autres types de contenus hiérarchiques

Mise en place

Outils utilisés

Dans le cas où vous voudriez ne pas utiliser le plug-in payant, il est possible d’appliquer les réglages qui vont suivre. Vous perdrez le moteur intelligent et la possibilité de fermer ou d’ouvrir les sous pages, comme vous le feriez dans un dossier.

Création des “Custom Post Type” ou “Contenu personnalisé”

Je commence par mettre en place un nouveau fichier PHP dans mon thème pour déclarer le nouveau “Contenu personnalisé”. Il est possible de ranger ce fichier dans un sous-dossier de votre thème nous l’initialiserons avec le fichier functions.php.

/**************************
CUSTOM POST TYPE
**************************/

add_action('init','gncomwp_faq_register_posttype',0);
function gncomwp_faq_register_posttype() {

$labels_faq = array(
'name' => 'FAQ',
'singular_name' => 'FAQ',
'add_new' => 'Ajouter votre question',
'add_new_item' => 'Ajouter votre question',
'edit_item' => 'Editer votre question',
'new_item' => 'Nouvelle question',
'view_item' => 'Voir la question',
'search_items' => 'Chercher dans les question',
'not_found' => 'Aucune question n\'a été trouvé',
'not_found_in_trash' => 'Aucune question n\'a été trouvé dans la corbeille'
);

$faq_args = array(
'labels' => $labels_faq,
'public' => true,
'show_in_nav_menus' => false,
'publicly_queryable' => true,
'exclude_from_search' => true,
'query_var' => 'faq',
'rewrite' => array(
'slug'=>'faq',
'with_front' => false,
),
'capability_type'=>'post',
'hierarchical'=> true,
'menu_position' => 22,
'menu_icon' => get_stylesheet_directory_uri() . '/images/post-type-gn.png',
'supports' => array(
'title',
'excerpt',
'page-attributes'
)
);

register_post_type ('faq', $faq_args);

}

Pour ce contenu, je n’ajoute pas de “Custom Taxonomy”. Le type est simple; question et réponse. Le classement par dossier sera suffisant.

Attention a bien régler les “custom post type” afin qu’ils se comportent comme des pages. C’est ce qui nous permettra de créer une hiérarchie de type dossier.

Je fais un appel du fichier PHP dans le fichier functions.php de mon thème pour activer ce nouveau contenu.

/* attention, j'utilise un thème enfant
et donc "CHILD_DIR" pour pointer vers mon fichier */
require_once( CHILD_DIR.'/lib-gn/gn-postype-faq.php' );

Une fois le lien fait un nouveau tyle de page s’affiche dans l’administration WordPress. J’ai même ici changé l’icône qui le représente.

capture d'écran pour une nouvelle question

Pour stocker les données de ma foire aux questions, j’utilise deux champs de WordPress par défaut: le titre qui devient ma question et l’extrait (ou excerpt en anglais) qui sera ma réponse. Évidemment, j’aurai pu créer des meta boxes personnalisées mais ces deux champs me suffisaient amplement.

Gestion des FAQ

Création des dossiers dans le back-office

Il me reste juste à créer les articles. Deux d’entre eux vont servir de dossier. Comme il ne seront pas affichés, volontairement, je mets le titre “DOSSIER” en capitale et en premier. Ils seront ainsi plus faciles à identifier visuellement. Il est inutile de mettre autre chose que le titre car ces contenus “dossier” ne seront pas affichés sur le site.

Le plugin Sidekick permet de fermer ou d’ouvrir les sous-pages, un peu comme le fonctionnement d’un dossier. Si vous n’avez pas utilisé ce plug-in, c’est le nom des pages “dossier” qui facilitera le classement. Attention, sur Mac, avec Firefox 5.01, lorsque vous avez un grand nombre de sous pages, le déplacement en glisser-déposer ne fonctionne pas avec Sidekick activé. J’ai prévenu le développeur, Dimas, à propos de ce bug.

Le plugin Simple Page Ordering permet de changer facilement l’ordre des questions.

Capture de Sous-pages et dossiers

Affichage des “Custom Post Type” dans le modèle de page

Pour afficher mes contenus je crée un nouveau modèle de page dans lequel, j’ajoute, après le corps principal, une nouvelle boucle (loop en anglais).

Je vais également créer une variable avant ma boucle de manière à pouvoir appliquer ce modèle de page plusieurs fois. Voir cet article du codex sur le fonctionnement du conditionnel dans WordPress si nécessaire.

if (is_page('21')) { // page La Sophrologie
$faq_post_parent =  955;
}

if (is_page('380')) { // page Profession de Sophrologue
$faq_post_parent = 954;
}

$gn_query_faq = new WP_Query (
array(
'post_type' => 'faq',
'post_parent' => $faq_post_parent,
'order' => 'ASC',
'orderby' => 'menu_order',
'posts_per_page' => -1,
)
); ?>

Questions les plus souvent posées

Dans cette boucle voici les paramètres que je retiens:

  • j’appelle les sous-pages de la variable (car j’applique cette nouvelle boucle à 2 pages)
  • cela concerne les “custom post type”
  • j’inverse l’ordre pas défaut en me callant sur l’ordre du menu

Une fois les modèles appliqués aux pages appropriées, les FAQ (sous-pages des dossiers respectifs) vont s’afficher dans le même ordre que dans mon administration WordPress.

Et voici le résultat en ligne; sans les styles CSS. Ce site est en plein développement.

image : Affichage des FAQ en ligne

Enjoy 🙂

6 réponses

  1. […] WordPress :: Organiser les « Custom Post Type » comme des dossiers :: Gr&eacu… Dans ce tutoriel, je ferai référence à un projet web en cours où il s’agissait de créer une série de FAQ sous la forme de “Custom Post Type”. Source: http://www.gregoirenoyelle.com […]

  2. […] WordPress :: Organiser les « Custom Post Type » comme des dossiers Dans ce tutoriel, je ferai référence à un projet web en cours où il s’agissait de créer une série de FAQ sous la forme de “Custom Post Type”. Source: http://www.gregoirenoyelle.com […]

  3. Bonjour

    pourquoi tout simplement ne pas utiliser une taxonomie de type catégorie ? Cela me semble plus simple et plus souple que de gérer des CPT de type page pour produire la « liste » des questions. Le contenu de la page « globale » peut être géré à travers un article sticky ou tout simplement le champs description.
    L’avantage est de pouvoir éventuellement gérer deux taxonomies pour la faq (imaginons un site sur l’informatique, avec l’appli et le système d’exploitation)

    Enfin c’est la preuve qu’il y a plusieurs moyens pour arriver à la même chose sur wordpress ^^

    1. Bonjour Marie-Aude
      C’est ce que j’ai fait au début. Sauf que pour l’administrateur, c’était beaucoup plus compréhensible comme ça. Il peut fermer et ouvrir ces dossiers. En plus avec un type page, l’ordre d’affichage se fait en glisser/déposer. Et, cette fonctionnalité est également appréciée par l’administrateur.

  4. rima

    Bonjour!
    J’ai créé une FAQ avec 39 questions, en la publiant, le classement s’est inversé (39°Q est devenue 1ere).
    Puis-je avoir une explication?

    Merci d’avance.

    1. Bonjour,
      Et vous avez bien choisi les même paramètres pour new WP_Query ?