Logo

Documentation

/home/vhsh1501/documentation.benjamin-bruant.com/wp-content/themes/zetheme/templates/single-wp.phpsingle

Custom Post Type factorisés

Créer une fonction pour enregistrer les CPT et une autre pour les labels, ce qui permettra de réduire la duplication de code. Voici une version refactorisée du code :

<?php
function zetheme_register_post_types() {
    // Fonction pour créer les labels
    function get_custom_post_type_labels($singular_name, $plural_name, $menu_name) {
        return array(
            'name' => $plural_name,
            'all_items' => 'Tous les ' . strtolower($plural_name),  // affiché dans le sous menu
            'singular_name' => $singular_name,
            'add_new_item' => 'Ajouter un ' . strtolower($singular_name),
            'edit_item' => 'Modifier le ' . strtolower($singular_name),
            'menu_name' => $menu_name
        );
    }

    // Fonction pour enregistrer un custom post type
    function register_custom_post_type($post_type, $singular_name, $plural_name, $menu_name, $menu_icon) {
        $labels = get_custom_post_type_labels($singular_name, $plural_name, $menu_name);

        $args = array(
            'labels' => $labels,
            'public' => true,
            'show_in_rest' => true,
            'has_archive' => true,
            'supports' => array('title', 'editor', 'thumbnail'),
            'menu_position' => 5,
            'menu_icon' => $menu_icon,
        );

        register_post_type($post_type, $args);
    }

    // Enregistrement des CPT
    register_custom_post_type('portfolio', 'Projet', 'Portfolio', 'Portfolio', 'dashicons-admin-customizer');
    register_custom_post_type('tutos-video', 'Tutoriel', 'Tutos-vidéo', 'Tutoriels vidéo', 'dashicons-format-video');

    // Déclaration de la Taxonomie
    $taxonomy_labels = array(
        'name' => 'Type de projets',
        'new_item_name' => 'Nom du nouveau Projet',
        'parent_item' => 'Type de projet parent',
    );

    $taxonomy_args = array(
        'labels' => $taxonomy_labels,
        'public' => true,
        'show_in_rest' => true,
        'hierarchical' => true,
    );

    register_taxonomy('type-projet', 'portfolio', $taxonomy_args);
}

Explications des modifications :

  1. Fonction get_custom_post_type_labels : Cette fonction génère les labels pour un CPT donné, ce qui évite de répéter le même code pour chaque CPT.
  2. Fonction register_custom_post_type : Cette fonction encapsule la logique d’enregistrement d’un CPT, ce qui simplifie l’appel et réduit la duplication.
  3. Appels simplifiés : Les appels à register_custom_post_type sont maintenant plus concis et lisibles.

Cette refactorisation rend le code plus modulaire et plus facile à maintenir.