仍然非常令人困惑,哈哈,但是从它的声音来看,当您查看单个帖子时,您希望根据帖子所在的类别显示不同的模板?
如果是这样,您可以尝试将其设置为 single.php:
<?php get_header(); ?>
    <?php
        if ( have_posts() ) { the_post(); rewind_posts(); }
        if ( in_category(1) || in_category(2) ) {
            include(TEMPLATEPATH . '/single-cat1-2.php');
        }
        else {
            include(TEMPLATEPATH . '/single-default.php');
        }
    ?>
<?php get_footer(); ?>
(来自http://wordpress.org/support/topic/alternate-single-post-template-for-specific-categories)
并创建文件“single-cat1-2.php”和“single-default.php”,只需添加到 if 语句中,检查帖子是否属于某个(或多个类别)并加载正确的模板。您也可以使用 ID、名称和它们的 slug 作为in_category函数的选择器,在此处阅读更多信息。
编辑:凯,你确实需要学习插件编程才能真正做到这一点。我已经开始为您提供一个快速插件来帮助您。它有效,只是并不完美。您当然可以使用不同的系统,例如在类别菜单中绑定类别,但我不想使用该页面的设置 API。
所以在你的插件目录中创建一个新目录,调用它PostCatTheme,在那里创建一个新文件index.php并把它放进去:
<?php
/*
 * Plugin Name: Post Category Templates
 */
//Replace __FILE__ with whatever the real path is because of symbolic link
/**
 * Allows declarations of which categories a single-post template is assigned to
 */
class WordpressPostCatTheme
{
    private $pluginDir, $templates;
    function __construct ()
    {
        $this->pluginDir = dirname(__FILE__);
        add_action("init", array($this, "load"));
        add_filter('single_template', array($this, 'get_post_template'));
    }
    public function WPCT_deactivate ()
    {
        delete_option("PostCatTheme_templates");
    }
    public function load ()
    {
        register_deactivation_hook( __FILE__, array(&$this, 'WPCT_deactivate') );
        $this->templates = get_option("PostCatTheme_templates");
        if ($this->templates === FALSE)
        {
            $this->templates = $this->get_post_templates();
            update_option("PostCatTheme_templates", $this->templates);
        }
    }
    //  This function scans the template files of the active theme, 
    //  and returns an array of [category] => {file}.php]
    public function get_post_templates()
    {
        $themes = get_themes();
        $theme = get_current_theme();
        $templates = $themes[$theme]['Template Files'];
        $post_templates = array();
        $base = array(trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()));
        foreach ((array)$templates as $template)
        {
            $template = WP_CONTENT_DIR . str_replace(WP_CONTENT_DIR, '', $template); 
            $basename = str_replace($base, '', $template);
            // don't allow template files in subdirectories
            if (false !== strpos($basename, '/'))
                continue;
            $template_data = implode('', file( $template ));
            $categories = '';
            if (preg_match( '|Categories (.*)$|mi', $template_data, $categories))
                $categories = _cleanup_header_comment($categories[1]);
            //The categories are split by a | (pipe), if there aren't any pipes, assume it's just
            //one category, otherwise split at the pipe
            if (empty($categories))
                continue;
            if (strpos($categories, "|") === FALSE)
                $categories = array($categories);
            else
                $categories = explode("|", $categories);
            foreach ($categories as $category)
            {
                if (!empty($category))
                {
                    if (isset($post_templates[$category]))
                        throw new Exception("Error, category assigned to more than one template");
                    if(basename($template) != basename(__FILE__))
                        $post_templates[trim($category)] = $basename;
                }
            }
        }
        //file_put_contents($this->pluginDir . "/log", json_encode($post_templates));
        return $post_templates;
    }
    //  Filter the single template value, and replace it with
    //  the template chosen by the user, if they chose one.
    function get_post_template($template)
    {
        global $post;
        $cats = wp_get_post_categories($post->ID);
        //Go through each category, until one hits
        foreach ($cats as $c)
        {
            $templateP = $this->templates[$c];
            if(!empty($templateP) && file_exists(TEMPLATEPATH . "/{$templateP}"))
            { 
                $template = TEMPLATEPATH . "/{$templateP}";
                break;
            }
        }
        return $template;
    }
}
if (!isset($PostCatThemePlugin))
    $PostCatThemePlugin = new WordpressPostCatTheme;
?>
之后,在您的自定义 single.php 模板中,将代码添加Categories: 1|2到标题部分(在哪里Template Name)。每当您更改或添加这些时,请确保停用并重新激活插件,以刷新存储此信息的缓存。
要获取类别的 ID,请编辑类别,在 URL 中,tag_ID= 后面的数字是类别的 ID。
希望对一些人有所帮助,
马克斯