我认为没有一种简单的方法可以强制WordPress排除模板部分,或加载不同的模板部分。看见1 和2 对于某些堆栈交换讨论和解决方法。但是在widget的特殊情况下,您可以实现一个过滤器(即,widget_display_callback
) 您可以在其中检查小部件的显示位置,以及它可能显示在什么类型的页面上,并告诉WordPress不要显示它(通过返回FALSE
). 查看Stack Exchange的更多信息3 和WordPress代码参考4.
就解决方法而言,最简单的方法可能是使用CSSdisplay: none
要使浏览器不在某些页面上显示小部件(或者可能是整个小部件区域)(如果需要,可以通过简单的方法来增加body标记的CSS类,以指示它是什么类型的页面)。
Edit: addition
考虑到你会想做一个儿童主题,而第219个主题组织得很好,我想到了几个选择,应该很简单
具有特殊模板部分的子主题
在子主题中,制作
template-parts
目录,生成
footer
目录,然后复制
template-parts/footer/footer-widgets.php
从二一九主题到你孩子主题的相应位置。修改副本以添加您的条件;像这样的
if ( is_active_sidebar( \'sidebar-1\' ) ) : ?>
<aside class="widget-area" role="complementary" aria-label="<?php esc_attr_e( \'Footer\', \'twentynineteen\' ); ?>">
<?php
$cats = get_the_category();
$cat_name = $cats[0]->name;
print_r($cat_name);
if ( is_active_sidebar( \'sidebar-1\' ) and
(strcasecmp(\'category with no footer widgets\', $cat_name) == 0)) {
?>
<div class="widget-column footer-widget-1">
<?php dynamic_sidebar( \'sidebar-1\' ); ?>
</div>
<?php
}
?>
</aside><!-- .widget-area -->
<?php endif; ?>
侧栏\\u窗口小部件过滤器使用
sidebars_widgets
过滤以完全删除小部件区域。类似于add\\u filter(\'sidebars\\u widgets\',\'remove\\u footer\\u widget\\u area\');
function remove_footer_widget_area( $sidebars_widgets ) {
$cats = get_the_category();
$cat_name = $cats[0]->name;
if( (strcasecmp(\'category with no footer widgets\', $cat_name) == 0) ) {
unset($sidebars_widgets[\'sidebar-1\']);
}
return $sidebars_widgets;
}
请参见
5一些注意事项:我假设是否显示小部件的测试取决于页面的类别,而页面仅在一个类别中。根据需要进行修改
-由于历史原因,\'sidebars\'
这里真的意味着\'widget areas\'
. WordPress充满了这样的时代错误
-另一个错误是函数名get_the_category()
, 它获取一个类别数组。所以它真的应该被称为get_the_categories()
.
-第二种方法从父主题复制和修改模板文件。但模板很小,不太可能改变。