我可以为自定义帖子类型分配模板文件吗?

我创建了一个名为items的自定义帖子类型,并且我希望像为页面一样为项目分配模板。 >

评论

wpbeginner.com/wp-themes/…(这是帖子,但您可以针对CPT进行修改)nathanrice.net/blog/wordpress-single-post-templates(这是帖子,但您可以针对CPT对其进行修改)实际上是一个插件的好主意。

#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();?>


#8 楼

我们使用自定义帖子模板插件制定了另一种解决方案