在Wordpress中,有一个函数wp_get_sidebars_widgets()
,它会将所有已注册的侧边栏ID的多维数组及其子级激活的小部件ID进行扫描。
对于上下文,这是一个示例输出:
Array
(
[wp_inactive_widgets] => Array
(
)
[sidebar-requests] => Array
(
[0] => widget-demographics-4
[1] => recent-posts-7
[2] => widget-newsletter-11
)
[sidebar-team] => Array
(
[0] => widget-sidebar-list-6
[1] => widget-donate-2
)
)
我在窗口小部件中使用此代码来查找它所在的侧边栏的ID。例如,只能有一个' widgets-newsletter-11',它存在于& #39;侧边栏请求'小部件区域。
我无法存储此小部件区域的ID。这是我试图使用的代码的简单版本。
$this_widget_id = 'widget-newsletter-11';
$this_widget_area_id;
$all_widgets = wp_get_sidebars_widgets();
foreach ( $all_widgets as $widget_area => $widget_id ) {
if ( $widget_id == $this_widget_id )
$this_widget_area_id = $widget_area;
}
在此结束时,存储的变量$this_widget_area_id
仍为空。
我做错了什么?
答案 0 :(得分:1)
我认为您正在针对Id检查数组,您应该检查该特定数组是否包含Id:
foreach ( $all_widgets as $widget_area => $widget_items ) {
if ( in_array($this_widget_id, $widget_items, true) )
$this_widget_area_id = $widget_area;
}
希望我没有误解你的问题。
答案 1 :(得分:1)
您不想遍历外部数组。您只想循环侧边栏请求
$this_widget_id = 'widget-newsletter-11';
$this_widget_area_id;
$all_widgets = wp_get_sidebars_widgets();
$all_widgets = $all_widgets[sidebar-requests];
foreach ( $all_widgets as $widget_area => $widget_id ) {
if ( $widget_id == $this_widget_id )
$this_widget_area_id = $widget_area;
}
答案 2 :(得分:0)
感谢@eatpeanutbutter建议我添加另一个循环。我添加了
foreach ( $widget_ids as $widget_order => $widget_id ) {
if ( $widget_id == $this_widget_id )
$this_widget_area_id = $widget_area;
}
一切都按预期工作。谢谢!