自定义页面模板已经使用了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' => '',
'after_widget' => ' ',
'before_title' => '',
'after_title' => '',
) );
}
add_action( 'widgets_init', 'my_widgets_init' );
/* wordpress page template file*/在Wordpress仪表板中,按预期将3或4个小部件分配给该区域。但是,调用dynamic_sidebar()会呈现一个空字符串。
有什么想法吗?
*更新*
这是第一个响应中提供的调试代码的输出。
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
)我花了大量的时间来解决这个问题。该网站使用不再支持樱桃框架模板的版本。我不愿意更新整个主题纯粹是因为这个小故障,如果我能修复它。
发布于 2019-07-07 04:04:32
在这种情况下,您可能需要检查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.")
";
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."";
else {echo "Sidebar Not Found
";}
echo "
All Sidebars Widgets: ".print_r($sidebarswidgets,true)."
";
exit;
}将其放入主题functions.php,然后通过http://example.com/?debugsidebar=my_sidebar进行检查。
在错误检查中有一个小的区别是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 ] ) ) {由于中间条件相同,这意味着侧边栏没有正确注册(不太可能,因为这似乎很好)-但更有可能的是,该键的数据不是一个小部件数组。您将从运行调试函数中找到答案。
它可能会在sidebars_widgets选项值中显示不匹配或损坏的数据(如果需要,可以对照wp_options表备份时的值进行检查)。
发布于 2019-08-13 14:28:19
过时的Cherry插件( 9.2.8.1版本,理论上不支持PHP )中的下列行导致边栏一直被隐藏。
In文件:wordpress/wp-content/plugins/cherry-plugin/includes/widgets/widgets-manager.php
Comment输出以下代码:
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并继续按预期工作。然而,就我的目的而言,简单地禁用整个机制就足够了。
https://wordpress.stackexchange.com/questions/342315
复制相似问题