键($GLOBALS[‘wp_REGISTERED_SIDEDARS’])始终显示相同的值

时间:2013-09-03 作者:David Icke

我使用的代码来自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上执行的,我看到了那里的代码,没有问题,我可以稍后处理,并实际使用它来测试它,并将检查更改为==,现在无论出于什么原因,它在主侧栏和辅助侧栏上都是正值。我不明白。

admin widgets但是,在前端根本不显示“这是侧边栏1”。讨厌这样的狗屎。

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....

结束