我使用的代码来自another answer
add_action( \'dynamic_sidebar\', \'wpse_96681_hr\' );
function wpse_96681_hr( $widget ) {
static $counter = 0;
// right sidebar in Twenty Ten. Adjust to your needs.
if ( \'sidebar\' === key( $GLOBALS[\'wp_registered_sidebars\'] ) )
print \'<h1>THIS IS SIDEBAR 1</h1>\';
if ( 0 !== $counter && 0 === $counter % 1 )
print \'<hr><h1>test</h1>\';
$counter += 1;
}
问题是它无法正确检测侧栏
key( $GLOBALS[\'wp_registered_sidebars\'] )
始终输出
footer-1
这是我的主题(genesis框架)注册的最后一个小部件区域。但它实际上应该输出
sidebar
(至少在主侧边栏中)因为当我删除这两行时,这就是我看到测试输出的地方。
我可以用before-
和after-widget-area
钩子将操作添加到那里,稍后将其删除,但我更喜欢这种代码的非特定于框架的版本,它可以在任何地方工作。有什么想法吗?这段代码是不是在genesis(我猜)下不起作用,还是过时了?也许还有另一种解决方案可以检测循环当前所在的小部件区域?
//编辑:奇怪的是(不是真的)这是在admin上执行的,我看到了那里的代码,没有问题,我可以稍后处理,并实际使用它来测试它,并将检查更改为==,现在无论出于什么原因,它在主侧栏和辅助侧栏上都是正值。我不明白。
但是,在前端根本不显示“这是侧边栏1”。讨厌这样的狗屎。
SO网友:cybmeta
$GLOBALS[\'wp\\u registered\\u sidebars\']是一个多维数组(数组数组),因此您必须循环此数组并为每个成员执行key()函数
现在我想我知道你想要什么了。如果您想获取小部件的父侧栏id,即分配小部件的小部件区域,您将无法通过全局wp\\U registered\\u侧栏进行操作(可能我错了,但在前端和管理区域使用该全局侧栏对我都不起作用)。您必须使用widget类的widget()方法的参数:
add_action( \'widgets_init\', \'cybnet_widgets_init\' );
function curioso_widgets_init() {
register_widget(\'cybnet_widget\');
}
class cybnet_widget extends WP_Widget {
function cybnet_widget() {
$widget_ops = array( \'classname\' => \'cybnet_widget\', \'description\' => \'\' );
$control_ops = array( \'width\' => \'\' => \'\', \'id_base\' => \'\' );
$this->WP_Widget( \'cybnet_widget\',\'cybnet_widget\', $widget_ops, $control_ops );
}
function widget( $args, $instance ) {
//Here is the id of the widget\'s parent sidebar
$parent_sidebar = $args[\'id\'];
.....Rest of the widget code....