一个已经使用了3到4年的自定义页面模板呈现了自定义侧栏,但它突然停止了呈现。我一生都搞不清楚问题出在哪里。
/* functions.php */
/**
* Register Areas sidebars and widgetized areas.
*
*/
function my_widgets_init() {
register_sidebar( array(
\'name\' => \'My Sidebar\',
\'id\' => \'my_sidebar\',
\'before_widget\' => \'<div>\',
\'after_widget\' => \'</div><div> </div>\',
\'before_title\' => \'<h2 class="rounded">\',
\'after_title\' => \'</h2>\',
) );
}
add_action( \'widgets_init\', \'my_widgets_init\' );
/* wordpress page template file*/
<?php if ( is_active_sidebar( \'my_sidebar\' ) ) : ?>
<div>
<?php dynamic_sidebar( \'my_sidebar\' ); ?>
</div>
<?php endif; ?>
在Wordpress仪表板中,按预期为该区域分配了3或4个小部件。但是调用dynamic\\u sidebar()会呈现一个空字符串。
有什么想法吗?
* UPDATE *
这是第一个响应中提供的调试代码的输出。
Sidebar ID: new_sidebar ( Active)
Sidebar Found
4 Widgets Found
All Sidebars Widgets:
Array
(
[wp_inactive_widgets] => Array
(
[0] => calendar-4
[1] => rss-3
[2] => em_calendar-4
[3] => recent-posts-2
)
[hca_alert_area] => Array
(
)
[SNIP - other sidebars]
[new_sidebar] => Array
(
[0] => search-2
[1] => nav_menu-2
[2] => em_widget-2
[3] => recent-posts-3
)
[footer-sidebar] => Array
(
[0] => nav_menu-3
)
[array_version] => 3
)
我花了大量时间试图解决这个问题。该站点使用不再受支持的Cherry框架模板版本。如果我能解决这个问题,我不愿意仅仅因为这个问题而更新整个主题。
最合适的回答,由SO网友:majick 整理而成
在这种情况下,您可能需要检查dynamic_sidebar
找出没有发生的事情。
if (isset($_GET[\'debugsidebar\'])) {add_action(\'init\', \'debug_sidebar\');}
function debug_sidebar() {
$id = $_GET[\'debugsidebar\'];
$sidebarswidgets = get_option(\'sidebars_widgets\');
if (is_active_sidebar($id)) {$status = " Active";} else {$status = "Inactive";}
echo "Sidebar ID: ".$id." (".$status.")<br>";
if (array_key_exists($id, $sidebarswidgets)) {
$found = "Sidebar Found";
if (is_array($sidebarswidgets[$id])) {
$widgets = count($sidebarswidgets[$id])." Widgets Found";
} else {$widgets = "Widget Array not Found!";}
echo $found."<br".$widgets."<br>";
else {echo "Sidebar Not Found<br>";}
echo "<br>All Sidebars Widgets: ".print_r($sidebarswidgets,true)."<br>";
exit;
}
你把它放在你的主题里
functions.php
然后可以通过
http://example.com/?debugsidebar=my_sidebar
bugout检查有一点不同is_active_sidebar
和dynamic_sidebar
从…起is_active_sidebar
功能:
! empty( $sidebars_widgets[ $index ] );
发件人
dynamic_sidebar
功能:
if ( empty( $wp_registered_sidebars[ $index ] ) || empty( $sidebars_widgets[ $index ] ) || ! is_array( $sidebars_widgets[ $index ] ) ) {
由于中间条件是相同的,这意味着侧栏没有正确注册(不太可能,因为这看起来很好),但更有可能的是,该键的数据不是一个小部件数组。您将通过运行debug函数了解到这一点。
它可能会在中显示不匹配或损坏的数据sidebars_widgets
选项值(如果需要,可以根据您提供的值进行检查wp_options
工作时的表备份。)
SO网友:fred2
过时的Cherry插件(版本9.2.8.1,理论上不支持PHP 7+)中的以下几行导致侧栏一直被隐藏。
In file: wordpress/wp-content/plugins/cherry-plugin/includes/widgets/widgets-manager.php
Comment out the following code:
add_filter( \'widget_display_callback\', \'maybe_hide_widget\', 10, 3 );
function maybe_hide_widget( $instance, $widget_object, $args ) {
if ( ! check_widget_visibility( $args[\'widget_id\'] ) )
return false;
return $instance;
}
还可以编辑
check_widget_visibility()
函数(显然)位于同一个文件中,因此它不会总是返回false,并继续按预期运行。然而,就我而言,简单地禁用整个机制就足够了。