web-dev-qa-db-fra.com

Modèle pour un article spécifique de type d'article personnalisé

J'ai le "évènement" du CPT. J'ai créé single-event.php.

Je veux qu'un événement particulier utilise un modèle différent de celui à événement unique.

J'ai lu ailleurs que cela pourrait être fait en créant un single-event- [slug] .php mais je l'ai essayé et cela ne fonctionne pas. WP utilise single-event.php. (Je ne trouve pas cela dans la documentation WordPress, alors je pense que j'ai peut-être mal compris?)

Y-a-t'il une façon de le faire?

5
spiral

Pour les modèles utilisés par WordPress, veuillez toujours vous référer à Schéma de hiérarchie des modèles dans le Codex.

Comme vous pouvez le voir, single-{$posttype}-{$slug}.php n'existe pas, il n'y a que single-{$posttype}.php.

Pour faire ce que vous voulez, regardez le filtre 'single_template':

add_filter( 'single_template', function( $template ) {
    global $post;
    if ( $post->post_type === 'event' ) {
        $locate_template = locate_template( "single-event-{$post->post_name}.php" );
        if ( ! empty( $locate_template ) ) {
            $template = $locate_template;
        }
    }
    return $template;
} );

Après avoir ajouté ceci dans votre functions.php, vous pouvez créer le fichier single-event-{$slug}.php et il sera chargé par WordPress.

9
gmazzap

Utilisez ce code dans votre fichier de fonctions pour un thème enfant et modifiez le 8 en post i.D pour lequel vous souhaitez utiliser le modèle CPT unique personnalisé.

function get_custom_post_type_template($single_template) {
     global $post;

     if ( is_single('8') ) {
          $single_template = get_stylesheet_directory() . '/custom-cpt-template.php';
     }
     return $single_template;
}
add_filter( 'single_template', 'get_custom_post_type_template' );
1
Brad Dalton