Answers:
从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 /
这对我有用:
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
模板,如果它存在。
这有点旧,但您也可以尝试以下方法:
为自定义帖子类型创建模板:
single-*custom-post-type-slug*.php
该文件应检查该文件,并验证文件是否存在,如果不存在,则回退到默认模板文件:
<?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 );
?>
将custom-post-type-slug的所有实例替换为您的custom post类型的实际子段。
我这样做是为了易于使用和组织目的。在我看来,比将所有文件都放在主题的根文件夹中更干净。
示例文件夹结构:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php
首先在您希望的页面上创建一个名为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>
这很简单。
在主题根目录中创建一个新的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();?>