如何呈现动态边栏小部件

时间:2013-09-06 作者:user37710

我一直在阅读Wordpress源代码,试图更好地了解动态侧栏的呈现方式。

然而,我遇到了一个关键点。。。

894 | do_action( \'dynamic_sidebar\', $wp_registered_widgets[$id] );
我找不到add\\u action(\'dynamic\\u sidebar\',…)的位置已定义。没有这一部分,我有点迷失在发生的事情中。

请参见此处的代码:

https://github.com/WordPress/WordPress/blob/b7c13e27c255e1fc1f03ab2ab432f1652a0ac212/wp-includes/widgets.php#L894

为了提供更多的上下文,我试图找出如何获取一组小部件,然后从那里开始,如何渲染每个小部件。

我需要更好的控制dynamic_sidebar(...); 给了我

1 个回复
SO网友:Dave Ross

如果插件或主题想在呈现侧边栏之前做些什么,那么这个操作就是存在的。您要查找的代码位于widgets.php, 在行动之前和之后:

$callback = $wp_registered_widgets[$id][\'callback\'];

do_action( \'dynamic_sidebar\', $wp_registered_widgets[$id] );

if ( is_callable($callback) ) {
    call_user_func_array($callback, $params);
    $did_one = true;
}
在wp\\u register\\u sidebar\\u widget()函数中,您可以看到$wp_registered_widgets[$id] 获取设置为有关小部件的信息数组,包括显示/输出回调:

$widget = array(
    \'name\' => $name,
    \'id\' => $id,
    \'callback\' => $output_callback,
    \'params\' => array_slice(func_get_args(), 4)
);
$widget = array_merge($widget, $options);

if ( is_callable($output_callback) && ( !isset($wp_registered_widgets[$id]) || did_action( \'widgets_init\' ) ) ) {
    do_action( \'wp_register_sidebar_widget\', $widget );
    $wp_registered_widgets[$id] = $widget;
}

结束

相关推荐

Call sidebar from a template

我需要在标题中调用侧栏。我已经切换到新的“二十一二”主题,并创建了我自己的儿童主题。有了这个新主题,我决定把事情组织起来,所以我把我的小部件功能、样式表和两个新的边栏模板(一个用于页眉,一个用于页脚小部件)放在一个名为pgwidgets.这是我在标题中使用的调用<? if ( is_front_page() ) : ?> <?php get_sidebar( \'homepage\' ) ; ?> <?php endif ; ?> 这称为s