Puis-je affecter un fichier de modèle à un type de publication personnalisé?
J'ai créé un type d'article personnalisé appelé items
et j'aimerais attribuer des modèles aux éléments, comme vous pouvez le faire avec des pages.
Puis-je affecter un fichier de modèle à un type de publication personnalisé?
J'ai créé un type d'article personnalisé appelé items
et j'aimerais attribuer des modèles aux éléments, comme vous pouvez le faire avec des pages.
Réponses:
À partir de la version 4.7 de WordPress, vous pouvez désormais attribuer des modèles de page personnalisés à d'autres types de publication en même temps que page.
Pour ce faire, en plus de l'en-tête du 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.
https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post -type-templates-in-4-7 /
Vous pouvez créer un modèle pour les types de publication personnalisés en créant des fichiers, comme par exemple:
single-mycustomposttype.php
Voir Hiérarchie des modèles dans le codex.
PS : cela a déjà été répondu.
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, un message de type message personnalisé foobar
et un slug du hello-world
code ci-dessus chargeraient le single-foobar-hello-world.php
modèle, s'il existait.
Pour ceux qui atteignent ce fil via Google, WP 4.7 a introduit des modèles pour tous les types de publication. Voir Make WP Core 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 poste, comme vous pouvez le faire avec Pages.
C'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 réel 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
Commencez par créer une page nommée Items en tant qu’élément qui affiche le contenu des types d’articles post, 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>
C'est très simple à faire.
Créez un nouveau fichier PHP dans le répertoire racine de votre thème et ajoutez-le au début:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
Exemple complet sera comme suit:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
<?php get_header();?>
<div class="container pt-5 pb-5">
<?php if (has_post_thumbnail()):?>
<img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid">
<?php endif;?>
<?php if (have_posts()) : while (have_posts()) : the_post();?>
<?php the_content();?>
<?php endwhile; endif;?>
</div>
<?php get_footer();?>
Nous avons mis au point une autre solution en utilisant le plugin de modèle de post personnalisé