我创建了一个名为
items
的自定义帖子类型,并且我希望像为页面一样为项目分配模板。 > #1 楼
从WordPress 4.7版开始,您现在可以将自定义页面模板与页面一起分配给其他帖子类型。要实现此功能,除了模板名称文件头之外,还可以使用以下方式指定模板支持的帖子类型模板发布类型:如下。
<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/
您可以在以下页面上获取有关它的更多信息。
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 /
评论
完善!不知道那件事!
– Tiago
20/12/08在14:44
#2 楼
您可以通过创建文件来创建自定义帖子类型的模板,例如:single-mycustomposttype.php
请参见抄本中的模板层次结构。
PS:这已经得到解答。
评论
谢谢,但是我想知道的是是否可以将自定义模板添加到自定义帖子类型。例如,我可以创建两个模板并将每个模板分配到其各自的职位吗?据我所知,这仅允许指定一个模板文件来处理该特定帖子类型。
–Odyss3us
2011年7月21日在17:05
如图所示,如果单个帖子需要不同的模板,则可能需要根据每个所需的模板创建几种自定义帖子类型。我猜这取决于您需要多少个不同的模板。您将在每个帖子中需要不同的模板中做什么?
–mike23
2011年7月22日在10:03
该答案现在已过期。参见Vinod Dalvi的答案。
–西蒙东
17年9月12日在0:34
它不是过时的。仍然可以正常工作,并且仍然是标准做法。
–蒂姆·霍尔曼(Tim Hallman)
20 Mar 1 '20 at 21:45
#3 楼
这是适合我的方法: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;
});
因此,给出了一个自定义帖子类型
foobar
和一个hello-world
的帖子,以上代码将加载single-foobar-hello-world.php
模板(如果存在)。 #4 楼
对于那些通过Google访问此主题的人,WP 4.7引入了适用于所有帖子类型的模板。有关完整的演练,请参见使WP Core。您不再受限于所有CPT的一个模板,可以像使用Pages一样逐个分配单个模板。#5 楼
这有点旧,但是您也可以尝试以下方法:为自定义帖子类型创建模板:段并验证文件是否存在,如果不存在,则回退到默认模板文件:
single-*custom-post-type-slug*.php
将custom-post-type-slug的所有实例替换为实际的您的自定义帖子类型的标签。
我这样做是为了易于使用和组织目的。在我看来,比将所有文件都放在主题的根文件夹中更干净。
示例文件夹结构:
<?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 );
?>
#6 楼
首先,在您希望创建的页面上创建名为Items的页面,该页面显示项目发布类型的内容,然后按如下方式创建一个模板文件并命名该模板项目。为您创建的页面选择该模板。<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>
#7 楼
这非常简单。在主题根目录中创建一个新的PHP文件,并将其添加到顶部:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
完整示例如下:
<?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();?>
评论
wpbeginner.com/wp-themes/…(这是帖子,但您可以针对CPT进行修改)nathanrice.net/blog/wordpress-single-post-templates(这是帖子,但您可以针对CPT对其进行修改)实际上是一个插件的好主意。