更改2个特定帖子类型单一帖子的侧边栏或小部件

时间:2011-09-23 作者:Drai

我想为2个特定的帖子显示一个不同的侧边栏(相同的自定义帖子类型)。我知道如何为不同的页面使用不同的模板来实现这一点,但我希望这一切都发生在单个posttype中。php页面。还是我想错了?我的最终目标是在特定帖子的侧栏中显示不同的文本小部件。

3 个回复
最合适的回答,由SO网友:Brooke. 整理而成

我想Widget Logic 就是你要找的。它向每个小部件添加一个字段,允许您指定哪个post获取哪个小部件。它使用标准Conditional Tags 使其易于使用。你只想做一些

is_single( \'Slug1-or-ID1\' ) ||  is_single( \'Slug2-or-ID2\' )
您也可以尝试a post type 仅显示特定职位类型的方法:

//not tested but something like     
global $post; return (\'book\' == get_post_type($post));

SO网友:Chip Bennett

另一种方法是注册多个侧栏,然后有条件地调用每个侧栏。e、 g。

注册侧栏:

// Registers Primary Widget Area
register_sidebar(
    array (
        \'name\' => \'Sidebar\',
        \'id\' => \'sidebar\',
        \'description\' => __\'Primary sidebar widget area\',
        \'before_widget\' => \'<div class="widget">\',
        \'after_widget\' => \'</div>\',
        \'before_title\' => \'<h3>\',
        \'after_title\' => \'</h3>\',
    ) 
);
// Registers Primary Widget Area
register_sidebar(
    array (
        \'name\' => \'{Post Type} Sidebar\',
        \'id\' => \'sidebar-{post-type}\',
        \'description\' => __\'{Post Type} sidebar widget area\',
        \'before_widget\' => \'<div class="widget">\',
        \'after_widget\' => \'</div>\',
        \'before_title\' => \'<h3>\',
        \'after_title\' => \'</h3>\',
    ) 
);
(注意:更换{post-type} 使用您的CPT的实际名称/段塞,视情况而定。)

然后,在模板文件中:

$sidebar_id = ( \'custom-post-type-slug\' == get_post_type() ? \'sidebar-{post-type}\' : \'sidebar\' );

dynamic_sidebar ( $sidebar_id );
因此,您不需要为您的CPT创建单独的模板文件;但是,您将在中显示两个单独的小部件区域Dashboard -> Appearance -> Widgets, 您必须单独填充。

EDIT

您如何显示您的CPT?

如果您正在使用archive-{post-type}.phpsingle-{post-type}.php, 那么你只需打电话dynamic_sidebar( \'sidebar-{post-type}\' ) 在这些模板文件中(或注册时命名的任何内容)。

否则,如果您使用的是普通archive.phpsingle.php 要显示您的CPT,请使用我最初建议的条件代码。

SO网友:Rutwick Gangurde

你不需要插件!在其中一个核心文件中定义了一个名为“sidebars\\u widgets”的过滤器,它将允许您非常轻松地实现这一点!我已经写了一篇关于如何做的简单教程。Show/hide widgets on specific pages. 检查此处的示例,查找以下行:

if(is_front_page() || is_home())
并将其替换为

if(is_singular(\'posttype\'))
就是这样!希望有帮助!

结束