WordPress
Déclarer un type de contenu personnalisé dans une extension, pas dans le thème
Fiche écrite en 2018, pour les navigateurs et les versions de l’époque. Vérifiez qu’elle correspond encore à votre environnement avant de l’appliquer.
On trouve très souvent les types de contenus personnalisés déclarés dans le functions.php du thème. Le jour où l’on change de thème, ils disparaissent de l’administration : les contenus sont toujours en base, mais plus personne ne peut les voir ni les modifier.
Un type de contenu, c’est de la donnée, pas de la présentation. Sa place est dans une extension, même minuscule :
<?php
/**
* Plugin Name: W4U Références
* Description: Type de contenu « Référence » pour le portfolio.
* Version: 1.0.0
* Author: W4U
*/
defined('ABSPATH') || exit;
function w4u_enregistrer_references()
{
register_post_type('reference', [
'labels' => [
'name' => 'Références',
'singular_name' => 'Référence',
'add_new_item' => 'Ajouter une référence',
'edit_item' => 'Modifier la référence',
'all_items' => 'Toutes les références',
],
'public' => true,
'has_archive' => true,
'rewrite' => ['slug' => 'references'],
'menu_icon' => 'dashicons-portfolio',
'supports' => ['title', 'editor', 'thumbnail', 'excerpt'],
'show_in_rest' => true, // indispensable pour le nouvel éditeur de blocs
]);
}
add_action('init', 'w4u_enregistrer_references');
// À l'activation : déclarer le type, puis régénérer les règles d'URL une seule fois
register_activation_hook(__FILE__, function () {
w4u_enregistrer_references();
flush_rewrite_rules();
});
register_deactivation_hook(__FILE__, 'flush_rewrite_rules');
Deux détails qui évitent des heures de recherche. flush_rewrite_rules() ne doit être appelé qu’à l’activation : à chaque chargement de page, il ralentit tout le site. Et show_in_rest doit être à true pour que le type de contenu soit éditable avec Gutenberg, qui arrive avec WordPress 5.0.
Sources
- WordPress Developer Resources, register_post_type() developer.wordpress.org