按类别自定义单个帖子

时间:2012-08-15 作者:Keefer

我正在努力了解WordPress的来龙去脉,非常抱歉。

我正在建立一个完整的网站,利用WordPress和一个自定义模板,基于210个基础。

我正在尝试在“post”类型下尽可能多的发布,而顶级的“list”页面只是类别页面。

一类是“工作”

我已经能够通过定制类别来定制它们。php和循环工作。php文件。但我该如何按类别定制一篇文章呢?

看起来像是在做一件作品。php将寻找一种称为“work”的自定义post类型有没有办法做一个单曲。php修改了由类别/类别slug触发的克隆?

2 个回复
最合适的回答,由SO网友:artparks 整理而成

打造你的单身生活。php如下所示:

<?php
$post = $wp_query->post;

if ( in_category( \'work\' ) ) {
  include( TEMPLATEPATH.\'/single-work-cat.php\' );
} 
else {
  include( TEMPLATEPATH.\'/single-generic.php\' );
}
?>
并制作单工猫。php您希望为单个工作类别帖子和单个通用帖子显示的模板。php是您希望在所有其他情况下显示的。对于更多类别,只需添加更多elseif语句并创建新的单个模板。

SO网友:Michael Dozark

我知道这是一个老问题,但如果其他人在搜索同一主题时发现,请注意不要在WordPress主题中使用include语句。始终使用get_template_part()locate_template() 相反

(参见http://make.wordpress.org/themes/guidelines/guidelines-theme-check/)

以下代码使用WordPress过滤器完成任务,并将自动搜索任何和所有类别的模板:

/**
 * Replace "themeslug" with your theme\'s unique slug
 *
 * @see http://codex.wordpress.org/Theme_Review#Guidelines
 */
add_filter( \'single_template\', \'themeslug_single_template\' );

/**
 * Add category considerations to the templates WordPress uses for single posts
 *
 * @global obj $post The default WordPress post object. Used so we have an ID for get_post_type()
 * @param string $template The currently located template from get_single_template()
 * @return string The new locate_template() result
 */
function themeslug_single_template( $template ) {
    global $post;

    $categories = get_the_category();

    if ( ! $categories )
        return $template; // no need to continue if there are no categories

    $post_type = get_post_type( $post->ID );

    $templates = array();

    foreach ( $categories as $category ) {

        $templates[] = "single-{$post_type}-{$category->slug}.php";

        $templates[] = "single-{$post_type}-{$category->term_id}.php";
    }

    // remember the default templates

    $templates[] = "single-{$post_type}.php";

    $templates[] = \'single.php\';

    $templates[] = \'index.php\';

    /**
     * Let WordPress figure out if the templates exist or not.
     *
     * @see http://codex.wordpress.org/Function_Reference/locate_template
     */
    return locate_template( $templates );
}
代码中有几个弱点。首先,这意味着WordPress对单个帖子执行两次locate\\u template()(一次在该函数运行之前,一次在运行期间)。第二,我不认为有一个干净的方法来确定优先查找哪些类别。这意味着,如果您的帖子位于多个类别中,并且具有唯一的单个帖子模板,那么您将无法选择使用哪个模板。

结束