可以让一个模板为不同的页面调用不同的侧边栏吗?

时间:2012-01-16 作者:PVA

我刚刚学到(在Rob Vermeer的帮助下!)如何使用一个模板并能够根据页面调用不同的顶部图形,现在我想知道是否有以下可能:

我正在使用这个页面。php(默认模板)用于多个页面。这些页面的布局相同,但每个页面上的侧边栏内容将不同。我可以编写一个函数来指定“如果此页面调用此侧栏”,而不必创建单独的页面模板来调用不同的侧栏吗?

在codex,在这一页上http://codex.wordpress.org/Function_Reference/get_sidebar 它有一个部分:多边栏。我试着修改代码,但似乎不起作用。这似乎是我想要的,但在示例中,它使用的是股票页面,而我的页面有自定义名称--不知道这是否是问题所在。

另外,我在循环后调用侧栏-不知道这是否是问题所在?

我当前的(不工作)代码是:

<?php
if ( is_customer() ) :
    get_sidebar(\'customer\');
elseif ( is_vendors() ) :
    get_sidebar(\'vendors\');
elseif ( is_services() ) :
    get_sidebar(\'services\');
else :
    get_sidebar();
endif;
?>
我有称为侧栏客户、侧栏供应商、侧栏服务的侧栏,以及称为客户、供应商、服务等的页面。我在页面中有代码。php模板的位置,如果我有一个侧栏,我只需要:

<?php get_sidebar(); ?>
非常感谢您的帮助!

我觉得你离我想做的事情最近了,但不完全是这样。

首先,这个网站不是一个博客。它由几个“静态”页面组成。我有一个主页模板只为家;页面。php(默认)模板用于大多数内部页面,404模板和小页面的小一栏模板。

页面。php模板有2列-主要内容的区域更宽,右侧的列更窄。我想使用右边的列作为“侧边栏”,但每个页面的侧边栏内容会有所不同。

所以,假设我有这样的页面:客户服务、关于我们、服务和联系。我想使用该页面。php模板,但侧边栏内容会有所不同。在过去,我会注册4个(或5个,或者我需要多少)侧栏,然后创建单独的模板,模板的唯一区别是它们调用不同的侧栏。我只是想知道是否有更整洁的方式来做这件事。

我的想法是,我会有一个附在每个页面上的边栏,基本上会在页面中执行if/then。php,我通常会调用侧栏:如果这是客户服务页面,请调用客户服务侧栏;如果这是关于页面,请调用关于侧栏。

但我不知道这是否可能,如果可能,确切的步骤和措辞将是什么。我不知道我是否会使用页面名称、ID等。我想我需要创建的页面和注册的边栏,但之后我不知道该怎么做。我认为这是可能的,因为codex中“get sidebar”函数页面上的“Multi Sidebars”部分,但我可能误解了这一点。我的第一个条目中有链接;向下滚动页面,查看多个侧栏。

?谢谢

5 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

如果您使用的是静态页面,请尝试使用is_page() 对于您的条件。假设您的静态页面有slug、“客户”、“供应商”和“服务”:

<?php
if ( is_page( \'customers\' ) :
    get_sidebar(\'customer\');
elseif ( is_page( \'vendors\' ) ) :
    get_sidebar(\'vendors\');
elseif ( is_page( \'services\' ) ) :
    get_sidebar(\'services\');
else :
    get_sidebar();
endif;
?>
但我同意@markratledge的观点,使用一个侧边栏和小部件逻辑可能会更好。

SO网友:fuxia

我的主题中有一个功能:

/**
 * Returns a string for the current template’s context.
 * Used by get_template_part()
 *
 * @return string
 */
function t5_template_context()
{
    // internal cache
    static $return = NULL;

    if ( ! is_null( $return ) )
    {
        return $return;
    }

    is_year()             and $return = \'year\';
    is_month()            and $return = \'month\';
    is_day()              and $return = \'day\';
    is_search()           and $return = \'search\';
    $pt = get_post_type() and $return = $pt; // FALSE or string.
    is_attachment()       and $return = \'attachment\';
    is_front_page()       and $return = \'front-page\';
    is_404()              and $return = \'404\';
    is_null( $return )    and $return = \'\';

    return $return;
}
现在,在我的模板中,我这样使用它:

完成索引。php

<?php # -*- coding: utf-8 -*-
get_header( t5_template_context() );

get_template_part( \'loop\', t5_template_context() );

// Loads the sidebar too.
get_footer( t5_template_context() );
我是从mfields’ 邮递Adding Context to Template Parts.

SO网友:Jared

您是否在functions.php 文件

您使用的条件语句是否正确?您是否编写了一个名为is_customers() 其他人呢?默认情况下,WordPress不附带此选项。因为显示侧栏的代码page.php, 只有is_page() 将返回true,因为它已经是WP中的函数。

如果您试图查看您所在的页面是否为自定义帖子类型,您可以使用以下内容:

Edited (a switch would be better to understand probably)

<?php
switch( get_post_type() ) {
    case \'customer\': get_sidebar( \'customer\' ); break;
    case \'vendors\': get_sidebar( \'vendors\' ); break;
    case \'services\': get_sidebar( \'services\' ); break;
    default: get_sidebar();
}
?>
该示例显示了如何根据切换要显示的侧栏get_post_type() 并且还有一个默认回调。

否则,您需要使用WP已经内置的函数,或者创建自己的函数。始终检查WordPress Codex 要使用的有效函数。

SO网友:markratledge

与多个侧栏不同的解决方案,可能更容易:WordPress › Widget Logic

SO网友:mor7ifer

我以前使用过以下方法:

if( !dynamic_sidebar( \'archive-sidebar\' ) ) {
    if( !dynamic_sidebar( \'post-sidebar\' ) ) {
        dynamic_sidebar( \'page-sidebar\' );
    }
}
基本上,这样做是允许显示的侧栏回退\'archive-sidebar\' 不存在,\'post-sidebar\' 如果不存在,\'page-sidebar\' 已使用。寓意是,您可以很容易地将逻辑应用于侧边栏。

我想你的错误可能是get_sidebar() 而不是dynamic_sidebar(). dynamic_sidebar() 使用您注册的侧栏get_sidebar() 查找文件。所以get_sidebar( \'customer\' ); 将寻找侧边栏客户。php。

结束

相关推荐

Enable page templates. How?

基本问题,但我想启用页面模板。我有一个启用了页面模板的主题。我切换到了另一个模板,但没有更改模板的选项,即使在创建新页面时也是如此。如何打开此选项?我在抄本和论坛上找到了根,但找不到。