Puis-je affecter un modèle à un type d'article personnalisé?

30

Puis-je affecter un fichier de modèle à un type d'article personnalisé?

J'ai créé un type de message personnalisé appelé items et je voudrais affecter des modèles aux éléments, comme vous pouvez le faire avec des pages.

    
posée Odyss3us 21.07.2011 - 17:38
la source

7 réponses

43

À partir de WordPress version 4.7 , vous pouvez désormais attribuer des modèles de page personnalisés à d'autres types de publication avec la page.

Pour ce faire, en plus de l'en-tête de fichier Nom du modèle, les types de publication pris en charge par un modèle peuvent être spécifiés à l'aide du type de publication du modèle: comme suit.

<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/

Vous pouvez obtenir plus d'informations à ce sujet dans les pages suivantes.

enlace enlace

    
réponse donnée Vinod Dalvi 23.04.2017 - 12:06
la source
19

Vous pouvez créer un modèle pour les types d'article personnalisés en créant des fichiers, comme par exemple:

single-mycustomposttype.php

Voir Hiérarchie des modèles dans le codex.

PS : cette option est déjà <. / a> été répondu.

    
réponse donnée mike23 21.07.2011 - 17:44
la source
6

Voici ce qui fonctionne pour moi:

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

Ainsi, avec un article de type personnalisé foobar et un slug de hello-world , le code ci-dessus chargerait le modèle single-foobar-hello-world.php , s'il existait déjà.

    
réponse donnée Chris Carson 11.06.2015 - 21:12
la source
4

Pour ceux qui atteignent ce fil via Google, WP 4.7 a introduit des modèles pour tous les types de publication. Voir Créer le noyau de WP pour une procédure complète. Vous n'êtes plus limité à un modèle pour l'ensemble de votre CPT, vous pouvez affecter des modèles individuels poste par courrier, comme vous pouvez le faire avec Pages.

    
réponse donnée WebElaine 08.03.2017 - 16:42
la source
1

Ceci est un peu vieux mais vous pouvez aussi essayer ceci:

Créez un modèle pour le type de publication personnalisé:

single-*custom-post-type-slug*.php

Le fichier doit vérifier le slug et vérifier si un fichier existe, sinon, se replier sur un fichier de modèle par défaut:

<?php 
    $slug = get_post_field( 'post_name', get_post() );
    $slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default';

    get_template_part( 'templates/*custom-post-type-slug*/' . $slug  );
?>

Remplacez toutes les instances de custom-post-type-slug par le slug actuel de votre type de publication personnalisé.

Je le fais pour des raisons de facilité d'utilisation et d'organisation. Cela me semble plus propre que d'avoir tous les fichiers dans le dossier racine du thème.

exemple de structure de dossier:

themeroot
| |single-cases.php
|-templates
| --cases
|   |default.php
|   |case-one.php
|   |case-two.php
    
réponse donnée eballeste 13.07.2016 - 23:59
la source
0

Tout d’abord, créez une page nommée Items en tant qu’éléments qui affichent le contenu à partir d’articles post types, puis créez un fichier modèle comme ci-dessous et nommez-le. Sélectionnez ce modèle pour la page que vous avez créée.

<div class="container">

    <div class="row">

        <div class="col-md-9">
            <div class="panel panel-default text-center">
                <?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?>                        

                        <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
                            <?php the_title();?>
                            <?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?>
                            <?php the_content();?>
                        <?php endwhile; ?>

                <?php wp_reset_query(); ?>                      
            </div>
        </div>

    </div>

</div>
    
réponse donnée clap 13.07.2015 - 10:06
la source
-3

Nous avons mis au point une autre solution en utilisant le plug-in de modèle de message personnalisé

    
réponse donnée Leon Rainbow 01.04.2016 - 15:59
la source

Lire d'autres questions sur les étiquettes