根据类别ID为特定类别创建Single.php

时间:2014-11-18 作者:Netsh

例如,我正在尝试为id为1的特定类别创建模板。模板应应用于属于此类别的所有页面。所以,它应该是类似于single-1的。php。

我在网上找到了很多解决方案,including this, 但似乎什么都不适合我。

4 个回复
SO网友:Robert hue

您可以使用此功能在网站上添加特定于类别的单模板页面。这个进去了functions.php

您可以根据需要定义任意多个单个模板。

function wpse_category_single_template( $single_template ) {
    global $post;
    $all_cats = get_the_category();

    if ( $all_cats[0]->cat_ID == \'1\' ) {
        if ( file_exists(get_template_directory() . "/single-cat1.php") ) return get_template_directory() . "/single-cat1.php";
    } elseif ( $all_cats[0]->cat_ID == \'2\' ) {
        if ( file_exists(get_template_directory() . "/single-cat2.php") ) return get_template_directory() . "/single-cat2.php";
    }
    return $single_template;
}
add_filter( \'single_template\', \'wpse_category_single_template\' );
这里我用过single-cat1.php 对于类别id 1和single-cat2.php 对于类别id 2。您可以根据自己的感觉为这些模板命名。

此函数还使用默认回退single.php 如果没有single-cat1.phpsingle-cat2.php 存在。

EDIT 1

我已经在我的两个网站上使用了上述代码,它在最新版本的WordPress上运行良好。

将此粘贴到functions.php

function show_template() {
    global $template;
    print_r($template);
}
add_action( \'wp_head\', \'show_template\' );
这将打印每页/帖子上使用的模板文件。现在访问您的网站,查看是否使用了正确的模板文件?如果它还在显示single.php 那么你的代码就有问题了。

EDIT 2

这是您的代码。

function wpse_category_single_template( $single_template ) {
    global $post;
    $all_cats = get_the_category();

    if ( in_category(6) ) {
        if ( file_exists(get_template_directory() . "/page-custom.php") ) {
          return get_template_directory() . "/page-custom.php";
        } else {
          return get_template_directory() . "/page.php";
        }
    }
    return $single_template;
}
add_filter( \'single_template\', \'wpse_category_single_template\' );

SO网友:Marcin

使用筛选器single_template 更改模板文件和函数的步骤in_category 要检查此帖子是否属于类别。

add_filter( \'single_template\', \'my_single_template\' );
function my_single_template($single_template)
{
    if (in_category(1)) {
        $file = get_template_directory().\'/single-cat-1.php\';
        if ( file_exists($file) ) {
            return $file;
        }
    }
    return $single_template;
}

SO网友:Pieter Goosen

您可以使用single_template 滤器in_category() 条件和查询对象,以测试当前帖子是否附加到我们指定的类别,如果是,则包括我们所需的模板

add_filter( \'single_template\', function ( $template )
{
    // Get the current single post
    $post_id = $GLOBALS[\'wp_the_query\']->get_queried_object_id();

    // Test to see if our post belongs to category 1
    if ( !in_category( 1, $post_id ) ) {
        return $template;
    }

    // Our post is attached to category 1, lets look for single-1.php
    $locate_template = locate_template( \'single-1.php\' );

    // Test if our template exist, if so, include it, otherwise bail
    if ( !$locate_template ) {
        return $template;
    }

    return $locate_template;
});

SO网友:justnajm

值得一提的是,如果您使用的是子主题,那么请使用以下代码检索类别单帖子模板。

function wpse_category_single_template( $single_template ) {
    global $post;
    $all_cats = get_the_category();
    if ( $all_cats[0]->slug == \'cat1\' ) {
        if ( file_exists(get_stylesheet_directory() . "/single-cat1.php") ) return get_stylesheet_directory() . "/single-cat1.php";
    }
    return $single_template;
}
add_filter( \'single_template\', \'wpse_category_single_template\' );

结束