根据模板不同的侧边栏(IS_PAGE_TEMPLATE不起作用)

时间:2021-04-04 作者:user204381

我试着按照this "How to show different sidebars for posts and pages in WordPress" tutorial 为不同类型的页面使用不同的侧栏。特别是,我正在为Woocommerce店面主题使用一个子主题,我想为所有有产品的店铺页面使用常规侧栏(默认模板),我想使用我自己的侧栏(显示博客类别而不是产品类别)来;“新闻”;包含我的博客帖子的页面。我想使用;“模板驱动方法”;在本教程中,这是我的最佳选择,但我肯定会接受其他方式。

我注册了我的侧栏(作为“博客侧栏”),配置了它的小部件,并创建了一个博客页面。模板名称为:News&;的php;事件,并编辑我的页面以使用该模板。在自定义模板的末尾,在页脚之前,我包括get_sidebar(\'blog-sidebar\');

然后我复制了侧边栏。将php导入我的子主题文件夹,并将“侧栏-1”替换为“博客侧栏”,如下所示:

if ( ! is_active_sidebar( \'blog-sidebar\' ) ) {
    return;
}
?>

<div id="secondary" class="widget-area" role="complementary">
    <?php dynamic_sidebar( \'blog-sidebar\' ); ?>
</div><!-- #secondary -->
这使得我的自定义侧栏显示正确,但当然它也取代了商店页面上的Woocommerce侧栏(我猜是“侧栏-1”)。所以我尝试了这个方法,修改了教程中的说明:

if ( (is_page_template(\'blog-page.php\') ) && ( is_active_sidebar( \'blog-sidebar\' ))) {    
    ?>
       <div id="secondary" class="widget-area" role="complementary">
        <?php dynamic_sidebar( \'blog-sidebar\' ); ?>
       </div><!-- #secondary -->    
    <?php
}
elseif ( is_active_sidebar( \'sidebar-1\' )) {
        ?>    
       <div id="secondary" class="widget-area" role="complementary">
        <?php dynamic_sidebar( \'sidebar-1\' ); ?>
       </div><!-- #secondary -->    
    <?php
    }
这只是在每个页面上显示默认的商店侧边栏,所以我猜我的is_page_template(\'blog-page.php\') 不起作用。我已经研究了几个小时,发现它在循环中不起作用,但我找不到适用于我正在尝试做的事情的解决方案(或者我只是不知道如何正确应用它-仍在学习!)。如果你能帮我解决这个问题,我会非常非常感激!

编辑:为了注册我的自定义侧栏,我在函数末尾添加了这个。我的孩子主题中的php:

function sf_child_theme_widgets_init() { 
register_sidebar( 
array( 
\'name\'       => __( \'Blog Sidebar\', \'sf_child_theme\' ), 
\'id\'         => \'blog-sidebar\', 
\'description\'   => __( \'Widgets in the blog sidebar\', \'sf_child_theme\' ), 
\'before_widget\' => \'<section id="%1$s" class="widget %2$s">\', 
\'after_widget\'  => \'</section>\', 
\'before_title\'  => \'<h2 class="widget-title">\', 
\'after_title\'   => \'</h2>\', 
) 
); 
} 
add_action( \'widgets_init\', \'sf_child_theme_widgets_init\' );
默认侧栏来自父主题。

编辑2:这里是博客页面的完整代码。php。我刚刚从父页面复制了代码。php并更改了侧栏调用do_action( \'storefront_sidebar\' );get_sidebar(\'blog-sidebar\');

<?php
/**
 * Template Name: News & Events
 *
 * The template for displaying blog pages.
 *
 *
 * @package storefront-child
 */


get_header(); ?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">

            <?php
            while ( have_posts() ) :
                the_post();

                do_action( \'storefront_page_before\' );

                get_template_part( \'content\', \'page\' );

                /**
                 * Functions hooked in to storefront_page_after action
                 *
                 * @hooked storefront_display_comments - 10
                 */
                do_action( \'storefront_page_after\' );

            endwhile; // End of the loop.
            ?>

        </main><!-- #main -->
    </div><!-- #primary -->

<?php
get_sidebar(\'blog-sidebar\');

get_footer();
?>

1 个回复
SO网友:Michael

一种可能性:

将新代码保存在侧栏中。php在您的子主题中。

在博客页面中。php,更改行get_sidebar(\'blog-sidebar\');do_action( \'storefront_sidebar\' ); (就像在原始的page.php中一样)。

在博客页面中测试。php页面模板没有自定义查询和循环,也没有安装woocommerce,这应该可以工作。

否则,自定义查询和循环可能会产生干扰。在这种情况下,请发布博客页面的完整代码。php。

或者,将代码保存在博客页面中。php,并将原始(父主题)代码保留在侧栏中。php。创建新文件sidebar-blog-sidebar.php 基于以下代码:

if ( ! is_active_sidebar( \'blog-sidebar\' ) ) {
    return;
}
?>

<div id="secondary" class="widget-area" role="complementary">
    <?php dynamic_sidebar( \'blog-sidebar\' ); ?>
</div><!-- #secondary -->

相关推荐

Searchresult sidebar change

那么,searchresult页面侧栏位于哪里?例如,在searchresult页面中,有一个“A”侧栏。但是,我想将其更改为“B”侧栏。我看着search.php 但无法理解侧边栏的来源。