我试着按照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();
?>