Les custom post type dans wordpress

Ici un bref rappel de la fonction de création d’un custom post type dans wordpress(type de contenu autre que page ou article, pour un besoin particulier) :

Creation du custom post

Dans le fichier functions.php, on insère la fonction suivante :

/* CUSTOM POST TYPE */
add_action('init', 'publication_register');

function publication_register() {
$labels = array(
'name' => 'Publications',
'singular_name' => 'publication',
'add_new' => 'Ajouter ',
'add_new_item' => 'Ajouter une publication',
'edit_item' => 'Editer la publication',
'new_item' => 'Nouvelle publication',
'all_items' => 'Toutes les publications',
'view_item' => 'Voir la publication',
'search_items' => 'Recherche publication',
'not_found' => 'Aucune publication trouvée',
'not_found_in_trash' => 'Aucune publication dans la corbeille',
'parent_item_colon' => '',
'menu_name' => 'Publications'
);
$args = array(
'exclude_from_search' => true, //camoufler la page dans la recherche
'labels' => $labels,
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => true,
'has_archive' => true,
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
'taxonomies' => array('category', 'post_tag'),
'rewrite' => array('slug' => 'publication', 'with_front' => false),
);
register_post_type('publication', $args);
}

Mon custom post ici s’appelle publication, vous pouvez changer ce nom pour celui de votre contenu particulier. C’est dans les arguments de la fonction que l’on va indiquer si l’on veut inclure ou non ces custom post dans la recherche avec ‘exclude_from_search’ => true ou false, si l’on veut y associer des taxos spécifiques , des catégories ou des mots clés par exemple avec : ‘taxonomies’ => array(‘category’, ‘post_tag’). Enfin avec support, on indique les blocs que l’on veut voir apparaître dans la page d’édition:   ‘supports’ => array(‘title’, ‘editor’, ‘thumbnail’, ‘custom-fields’), (le bloc titre, parfois inutile selon les cas, l’éditeur de texte, pareil, l’image à la une et les metabox).

Cette fonction va donc créer un nouvel onglet « publications » dans le bakoffice.

Réécrire les permaliens

La première chose à faire, une fois la fonction du custom post type créée, est de réenregistrer les permaliens. Rendez-vous donc dans le backoffice, sous l’onglet Réglages/ Permaliens et réenregistrez les permaliens. Cela vous évitera de tomber sur une page 404.

Créer les fichiers d’archive et single pour votre custom post type

Comme l’explique le codex, sans action supplémentaire de notre part, wordpress va se servir des fichiers archive.php et single.php pour afficher la page d’archive et single de notre custom post type.  Pour plus de flexibilité, on peut donc créer un fichier « archive-nomducustomposttype.php » et « single-nomducustomposttype.php ».

Pour cela on peut copier les fichiers archive.php et single.php et les renommer.

Comment afficher les custom post type sur son site ?

Ensuite, la façon la plus simple est de vous rendre dans l’onglet Apparence / Menu. Sur la gauche vous devriez voir un nouvel onglet portant le nom de votre custom post type. La première case à cocher avec la mention « toutes les… » ou « tous les… » correspond à votre page d’archive de vos custom post type.

Voici un exemple avec un custom post type « formation ». Dans la page des menu, on retrouve un nouvel onglet « Formations ». On clique sur « Afficher tout » et on coche la case « Toutes les formations ». On clique enfin sur « Ajouter au menu ».

custom post type menu

En cliquant sur cet item de menu en front, on tombera sur la nouvelle page d’archive contenant tous les custom post type « formations ».

Creation d’un template de page spécifique

On peut également choisir de créer un template de page spécifique, pour y insérer des boucles personnalisées et modifier entièrement le comportement de la page. Si par exemple votre custom post type porte le nom de « publications » . Les étapes sont les suivantes:

on crée un fichier publications.php avec l’en-tête suivante:

<?php /* * Template Name: Publications */ ?>

et voici un exemple de boucle à l’intérieur de cette page.

       <?php $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; $custom_args = array( 'post_type' => 'publication',
'posts_per_page' => 5,
'post_status' => ' published',
'order_by' => 'post_date',
'order' => 'DESC',
'paged' => $paged
);

;
?> <?php $custom_query = new WP_Query($custom_args); ?>
<?php if ($custom_query->have_posts()) : ?>
<?php while ($custom_query->have_posts()) : $custom_query->the_post(); ?>


</p>
<header class="page-header">

</p>
<h3 class="entry-title"> <a href="<?php the_permalink(); ?>" title="<?php the_title() ?>"><?php the_title(); ?></a></h3>
<p>

</header>
<p>


</p>
<div class="entry-content">
<?php the_excerpt(); ?>

</div>
<p>




<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

Pour afficher cette page, il faut maintenant créer une page dans le backoffice de wordpress, et lui donner comme modèle de page  » publications ». Le comportement de cette page pourra être le même que celui d’un « archive-nomducustomposttype.php » par exemple, et affichera tous vos custom post type, à la manière d’une page d’archive classique avec les articles.