Suivant la nature du site, le type de contenu « Articles » tel que définit dans WordPress ne convienne pas. Il peut également être utile d’avoir des types de contenus spécifiques afin de pouvoir les différencier les uns des autres sans passer par la notion de catégorie de WordPress.
Ainsi il est possible de créer des types de contenus personnalisés.
Pour ce faire nous utiliserons la fonction WP register_post_type.
register_post_type(string $post_type, array|string $args = array()) : WP_Post_Type | WP_Erreur
Cette fonction prend deux paramètres :
$post_type est une chaine de caractère qui donne le nom « interne » du type de post. Ce nom ne doit pas dépasser 20 caractères et ne doit contenir que des caractères alphanumériques minuscules. Le tiret et le trait de soulignements sont autorisés.
$args est un tableau d’arguments décrivant le type de post. Il y a de très nombreux argument, vous pouvez en retrouver la liste sur https://developer.wordpress.org/reference/functions/register_post_type/
Avec ces arguments il est possible de définir le nom du type de post, lui associé une icône qui apparaitra dans le menu d’administration, ….
Notez qu’avec l’argument « supports », vous pouvez définir la liste des éléments de contenu « standard » que vous souhaitez utilisé. Il s’agit, par exemple, du titre (title), du résumé (excerpt) et d’une image mise en avant (thumbnail).
L’enregistrement d’un contenu personnalisé se fait à l’aide du hook « init ».
function project() {
$labels = array(
'name' => _x( 'Project items', 'post type general name' ),
'singular_name' => _x( 'Project item', 'post type singular name' ),
'menu_name' => 'Project',
);
$args = array(
'labels' => $labels,
'menu_icon' => 'dashicons-portfolio',
'description' => 'Projets réalisés',
'public' => true,
'menu_position' => 5,
'supports' => array( 'title', 'excerpt' , 'editor'),
'has_archive' => true,
);
register_post_type( 'project', $args );
}
add_action('init', function(){
project();
flush_rewrite_rules();
});
L’exemple de code ci-dessous montre le principe.
Notez que le paramètre « labels » peut prendre de nombreuses valeurs et permet de définir la manière dont le type de poste est affiché dans le menu d’administration.
Après l’enregistrement avec « register_post_type » il est important d’exécuter « flush_rewrite_rules() » afin de mettre à jours les permaliens.