多个自定义帖子类型的Wordpress模板

时间:2015-11-03 17:06:13

标签: php wordpress

我有多个wordpress模板文件:

  • 单example_1.php
  • 单example_2.php
  • 档案馆-example_1.php
  • 档案馆-example_2.php

这些完全相同,只是针对不同的自定义帖子类型。因此,我想将它们合二为一。我添加了这个功能:

add_filter( 'template_include', function( $template ) 
{
    $my_types = array( 'example_1', 'example_2' );
    $post_type = get_post_type();

    if ( ! in_array( $post_type, $my_types ) )
            return $template;
    return get_stylesheet_directory() . '/single-example.php'; 
});

这"重定向"每个单一和档案馆都在同一个模板上。

如何将存档页面仅重定向到archiv-example和单个页面到单个示例?

2 个答案:

答案 0 :(得分:3)

这有两个部分 - 您需要处理存档模板以及单个帖子模板的模板。

对于存档,使用is_post_type_archive($post_types)功能检查当前请求是否适用于您要返回的其中一种帖子类型的存档页面。如果匹配,请返回您的公共存档模板。

对于单个帖子,请使用is_singular($post_types)函数查看当前请求是否针对您指定的其中一种帖子类型的单个帖子。如果匹配,则返回常用的单个帖子模板。

在这两种情况下,如果某个匹配项被其他过滤器修改,则您需要返回$template

add_filter( 'template_include', function( $template ) {
    // your custom post types
    $my_types = array( 'example_1', 'example_2' );

    // is the current request for an archive page of one of your post types?
    if ( is_post_type_archive(  $my_types ) ){
        // if it is return the common archive template
        return get_stylesheet_directory() . '/archive-example.php';
    } else 
    // is the current request for a single page of one of your post types?
    if ( is_singular( $my_types ) ){
        // if it is return the common single template
        return get_stylesheet_directory() . '/single-example.php';
    } else {
        // if not a match, return the $template that was passed in
        return $template;
    }
});

答案 1 :(得分:0)

您希望使用is_post_type_archive($post_type)来检查是否为存档页面提供了查询。

if ( is_post_type_archive( $post_type ) ) 
    return get_stylesheet_directory() . '/archive-example.php';
return get_stylesheet_directory() . '/single-example.php';