07 71 64 45 14  contact@upleaft.fr

Comment créer des types de publication personnalisés sur WordPress ?

Vous voulez apprendre à créer facilement des types de publication personnalisés (Custom Post Type) sur WordPress ? Par défaut WordPress embarque deux types de publication : les pages et les articles. Il est possible d’en ajouter plus ! Les types de publication personnalisés transforment WordPress en un puissant système de gestion de contenu. Dans cet article, vous allez apprendre à créer facilement des types de publication personnalisés dans WordPress. Il existe deux méthodes, à vous de choisir celle qui vous conviens le mieux.

Objectif du tutoriel

Imaginons que vous êtes un artiste et que vous souhaitez ajouter un onglet « Portfolio » sur votre site WordPress. Vous disposez déjà d’une partie blog que vous administrez depuis le menu des articles et des pages depuis le menu des pages.

Avant

Après

Méthode 1 : avec une extension WordPress

Si vous souhaitez créer un nouveau type de publication à partir d’une extension WordPress c’est possible ! Le plugin Custom Post Type UI permet d’ajouter des nouveaux types de publications visuellement depuis l’interface d’administration de WordPress.

Custom Post Type UI : plugin pour créer des nouveaux types de publication sur WordPress

Méthode 2 : avec du code PHP

Si vous ne souhaitez pas utiliser l’extension Custom Post Type UI, il vous suffit de copier-coller le code PHP ci-dessous dans le fichier functions.php de votre thème.

function cpt_portfolio() {

	/**
	* Post Type: Portfolio.
	*/

	$labels = array(
		"name" => __( "Projets", "montheme" ),
		"singular_name" => __( "Projet", "montheme" ),
		"menu_name" => __( "Portfolio", "montheme" ),
		"all_items" => __( "Tous les projets", "montheme" ),
		"add_new" => __( "Ajouter", "montheme" ),
		"add_new_item" => __( "Ajouter un nouveau projet", "montheme" ),
		"edit_item" => __( "Modifier un projet", "montheme" ),
		"new_item" => __( "Nouveau projet", "montheme" ),
		"view_item" => __( "Voir le projet", "montheme" ),
		"view_items" => __( "Voir les projets", "montheme" ),
		"search_items" => __( "Rechercher un projet", "montheme" ),
		"not_found" => __( "Aucun projet trouvé", "montheme" ),
		"not_found_in_trash" => __( "Aucun projet trouvé dans la corbeille", "montheme" ),
		"parent_item_colon" => __( "Projet parent :", "montheme" ),
		"featured_image" => __( "Image mise en avant pour ce projet", "montheme" ),
		"set_featured_image" => __( "Définir l'image mise en avant pour ce projet", "montheme" ),
		"remove_featured_image" => __( "Retirer l'image mise en avant pour ce projet", "montheme" ),
		"use_featured_image" => __( "Utiliser comme image mise en avant pour ce projet", "montheme" ),
		"archives" => __( "Projets", "montheme" ),
		"insert_into_item" => __( "Insérer dans le projet", "montheme" ),
		"uploaded_to_this_item" => __( "Mis en ligne sur ce projet", "montheme" ),
		"filter_items_list" => __( "Filtrer la liste des projets", "montheme" ),
		"items_list_navigation" => __( "Navigation de liste de projets", "montheme" ),
		"items_list" => __( "Liste des projets", "montheme" ),
		"attributes" => __( "Attributs des projets", "montheme" ),
		"name_admin_bar" => __( "Projet", "montheme" ),
		"parent_item_colon" => __( "Projet parent :", "montheme" ),
	);

	$args = array(
		"label" => __( "Projets", "montheme" ),
		"labels" => $labels,
		"description" => "Type de contenu qui concerne les projets",
		"public" => true,
		"publicly_queryable" => true,
		"show_ui" => true,
		"delete_with_user" => false,
		"show_in_rest" => true,
		"rest_base" => "",
		"rest_controller_class" => "WP_REST_Posts_Controller",
		"has_archive" => false,
		"show_in_menu" => true,
		"show_in_nav_menus" => true,
		"exclude_from_search" => false,
		"capability_type" => "post",
		"map_meta_cap" => true,
		"hierarchical" => false,
		"rewrite" => array( "slug" => "portfolio", "with_front" => true ),
		"query_var" => true,
		"menu_icon" => "dashicons-screenoptions",
		"supports" => array( "title", "editor", "thumbnail" ),
	);

	register_post_type( "portfolio", $args );
}

add_action( 'init', 'cpt_portfolio' );

Une fois ce bout de code ajouté dans votre thème, vous devriez voir apparaître un nouvel onglet « Portfolio » dans l’interface de WordPress. Vous êtes bien évidemment libre de changer les intitulés selon la nature de votre projet.

Plus de détails sur la documentation officiel de WordPress

Comment personnaliser l’icône de mon nouveau type de contenu ?

Il est possible de modifier l’icône de votre nouveau type de contenu. Pour cela, vous devez vous rendre sur le site Dashicons de WordPress et modifiez la ligne suivante par l’icône de votre choix.

"menu_icon" => "dashicons-screenoptions",

Dashicons : icônes officielles de Word Press

Comment afficher mon nouveau type de contenu ?

Une fois que vous avez mis en place votre nouveau type de contenu il va falloir mettre en place une boucle qui va afficher vos contenus.

Méthode 1 : en PHP

Le bout de code ci-dessous est une boucle WordPress simple qui va afficher l’ensemble des contenus de votre portfolio. Vous pouvez copier ce code dans votre modèle de page WordPress en PHP. Si la boucle retourne aucun élément alors le message « Pas de contenu à charger » s’affichera.
Cette boucle est intéressante car elle vous laisse le choix dans le balisage HTML, pratique si vous souhaitez avoir entièrement la main sur le design ou le SEO.

  • ‘post_type’ est le type de contenu qu’on souhaite afficher.
  • ‘posts_per_page’ est le nombre de contenu à afficher. (astuce si vous définissez -1 cela va afficher l’ensemble des contenus)
<?php 
	$args = array( 'post_type' => 'portfolio', 'posts_per_page' => 10 );
	$the_query = new WP_Query( $args ); 
?>
<?php if ( $the_query->have_posts() ) : ?>
	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
		<h2><?php the_title(); ?></h2>
		<div class="entry-content">
			<?php the_content(); ?> 
		</div>
	<?php endwhile;
wp_reset_postdata(); ?>
<?php else:  ?>
	<p><?php _e( 'Pas de contenu à charger' ); ?></p>
<?php endif; ?>

Voir la documentation de WordPress sur les boucles pour plus de détails

Comment afficher mon nouveau type de contenu avec une extension ?

Si vous ne souhaitez pas toucher au code PHP de votre thème, vous pouvez vous tourner vers des extensions gratuites qui permettent de faire la même chose avec une couche graphique prédéfinie comme Post Grid.

Conclusion

Vous savez désormais comment créer des nouveaux types de publication personnalisés avec ou sans code PHP. Si vous souhaitez obtenir de l’aide sur la création de votre site WordPress vous pouvez contacter Upleaft pour une demande de support personnalisé.

Au boulot 😉 !


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Logo Upleaft blanc

Upleaft est un nom commercial utilisé par Anthony Thirion développeur WordPress basé à Grenoble.

Agence WordPress

Upleaft 2022 • Tous droits réservés