侧栏和小部件之间的关系存储在sidebars_widgets
选项,作为一个序列化数组,可能如下所示(展开):
Array
(
[orphaned_widgets_1] => Array
(
[0] => recent-posts-2
)
[wp_inactive_widgets] => Array
(
[0] => calendar-2
)
[sidebar-1] => Array
(
[0] => recent-posts-5
[1] => text-6
[2] => text-2
[3] => search-6
[4] => text-3
)
[sidebar-2] => Array
(
[0] => text-4
)
[sidebar-3] => Array
(
[0] => text-5
[1] => recent-posts-6
[2] => search-7
)
)
WordPress使用
wp_get_sidebars_widgets()
函数获取此关系。
如果我们想在哪个侧栏中找到,例如最近帖子的第五个实例小部件(recent-posts-5
) 属于,然后我们可以搜索数组并找到sidebar-1
侧栏。
Helper function:
我们可以使用这样的辅助函数来实现这一点:
/**
* @param string $widget_id Widget ID e.g. \'recent-posts-5\'
* @return string|null $sidebar_id Sidebar ID e.g. \'sidebar-1\'
*/
function wpse_get_sidebar_id_from_widget_id( $widget_id )
{
$sidebars = wp_get_sidebars_widgets();
foreach( (array) $sidebars as $sidebar_id => $sidebar )
{
if( in_array( $widget_id, (array) $sidebar, true ) )
return $sidebar_id;
}
return null; // not found case
}
在中
PHP 7.1 我们可以使用
?string
作为可为null的字符串类型。
Usage example:
$sidebar_id = wpse_get_sidebar_id_from_widget_id( \'recent-post-5\' );
所以在你的
in_widget_form
您可以尝试的回调(未测试):
add_action( \'in_widget_form\', function( $widget_object, $return, $instance )
{
$sidebar_id = wpse_get_sidebar_id_from_widget_id( $widget_object->id );
if( is_string( $sidebar_id ) )
{
// ... do stuff ...
}
}, 10, 3 );
Update: 这似乎在这里得到了类似的解决:How to determine which sidebar the widget has been added to, via widget admin?.