如何在特定页面上显示不同的小部件,对其他页面隐藏

时间:2012-11-20 作者:cindyg

我想在所有页面上显示一个动态侧栏,在主页上显示一个不同的侧栏。还有一些我不想显示其中任何一个的特定页面。

这段代码并没有隐藏主页上不需要的边栏;显示两个侧栏。如何从主页中隐藏“multipackage”并仅显示“singlepackage”?(我想我本以为elseif会解决这个问题。我也尝试了“else”,但我遇到了一个语法错误)。

<?php
    if(!function_exists(\'dynamic_sidebar\') 
        || !dynamic_sidebar(\'multipackage\'));

    elseif (is_page_template(\'page-homepage.php\')) {
        dynamic_sidebar(\'singlepackage\');

        // also need to hide both sidebars from Page IDs 4 and 5

        }

    ?>
FWIW我读过法典http://codex.wordpress.org/Function_Reference/dynamic_sidebar, 此网站和其他资源,如http://dreamwhisperdesigns.com/genesis-tutorials/load-sidebar-specific-pages/ (我不是一个经验丰富的php开发人员,语法是我经常失败的地方,如果这还不明显的话!)

我真的很想避免使用插件。提前感谢大家。

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

我想在所有页面上显示一个动态侧栏,在主页上显示一个不同的侧栏。还有一些我不想显示其中任何一个的特定页面。

这段代码并没有隐藏主页上不需要的边栏;显示两个侧栏。如何从主页中隐藏“multipackage”并仅显示“singlepackage”?(我想我本以为elseif会解决这个问题。我也尝试了“else”,但我遇到了一个语法错误)。

假设这些条件:

  • singlepackage 侧栏显示在Site Front Page (或者你是说Blog Posts Index?)
  • multipackage 侧栏显示打开static pages
  • multipackage 侧栏不显示static page with ID $id

    <?php
    if ( is_front_page() ) {
        // This is the Site Front Page,
        // display singlepackage
        dynamic_sidebar( \'singlepackage\' );
    } else if ( is_page() && ! is_page( $id ) ) {
        // This is a static page,
        // but NOT static page with ID $id;
        // display multipackage
        dynamic_sidebar( \'multipackage\' );
    }
    ?>
    
    注意:如果您愿意singlepackage 打开时显示Blog Posts Index 而不是在Site Front Page, 您将要使用is_home():

    <?php
    if ( is_home() ) {
        // This is the Site Front Page,
        // display singlepackage
        dynamic_sidebar( \'singlepackage\' );
    } else if ( is_page() && ! is_page( $id ) ) {
        // This is a static page,
        // but NOT static page with ID $id;
        // display multipackage
        dynamic_sidebar( \'multipackage\' );
    }
    ?>
    
    如果要显示默认内容(即,如果没有小部件应用于指定的小部件区域,则显示的内容),则需要使用if ( ! dynamic_sidebar( \'singlepackage\' ) ), 像这样:

    <?php
    if ( is_front_page() ) {
        // This is the Blog Posts Index,
        // display singlepackage
        if ( ! dynamic_sidebar( \'singlepackage\' ) ) {
            // default content goes here
        }
    } else if ( is_page() && ! is_page( $id ) ) {
        // This is a static page,
        // but NOT static page with ID $id;
        // display multipackage
        if ( ! dynamic_sidebar( \'multipackage\' ) ) {
            // default content goes here
        }
    }
    ?>
    

SO网友:developdaly

您的代码在英语中的意思是:

如果没有dynamic\\u侧栏函数或没有名为multipackage的侧栏,如果这是主页模板,则显示singlepackage侧栏。

。。。所以你可以看到第一个条件中没有“THEN”部分。

<?php
if (function_exists(\'dynamic_sidebar\') && dynamic_sidebar(\'singlepackage\') && is_page_template(\'page-homepage.php\')) {
    dynamic_sidebar(\'singlepackage\');
elseif( function_exists(\'dynamic_sidebar\') && dynamic_sidebar(\'multipackage\'));
    dynamic_sidebar(\'multipackage\');
}
?>
这意味着如果函数dynamic\\u侧栏存在,并且有一个singlepackage侧栏,这是主页模板,那么显示singlepackage侧栏。否则,如果函数dynmaic\\u侧栏存在并且存在多包侧栏,则显示多包侧栏。

SO网友:cindyg

不幸的是,出于这样或那样的原因,这里的帮助对我的特殊情况都不起作用(遇到了很多语法错误,我不知道为什么)。这就是最终起作用的原因:

<?php 
        if ( is_front_page() ) {
            dynamic_sidebar( \'singlepackage\' );
        }
        elseif ( is_page(array(\'827\',\'828\',\'829\',\'830\') )) {    
            dynamic_sidebar(\'multipackage\');
        } 
        else {
        }
    ?> 
这是我从“可变侧边栏内容”下的示例拼凑而成的http://codex.wordpress.org/Conditional_Tags

结束

相关推荐

在PHP5.4上全新安装WordPress中的wp-admin空白

Wordpress 3.4.2的干净安装在登录管理面板时会出现一个空白屏幕。这是由于以下资源未加载到Chrome中:GET /wp-admin/ /wp-admin/:32 GET /wp-admin/load-styles.php?c=0&dir=ltr&load=wp-jquery-ui-dialog&ver=3.4.2 /wp-admin/:32 GET /wp-admin/load-scripts.php?c=0&load=jquery,util