Wordpress:用于主题开发的wp_get_sidebars_widgets的替代方案

时间:2014-09-24 12:56:31

标签: php wordpress-theming wordpress

wp_get_sidebars_widgets()非常有用,可以在侧边栏中获取有关小部件的信息。但是,WP codex声明它是一个私有函数,不能用于主题开发......具体是我的情况。有哪些替代方案?没有它如何获取小部件的信息?我想用dynamic_sidebar()和一些PHP,但我不知道如何,真的。

我想得到的是:

  • 小部件ID(通知我使用了哪个小部件)。
  • 用户在表单中输入的小部件数据。

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,所以我找到了一个解决方案,但它看起来像是一个黑客。如果有人知道更好的事情......

我的侧边栏的ID是'主页'我的所有小部件ID都以我的前缀nd_home_开头:

global $wp_registered_sidebars, $wp_registered_widgets;

ob_start();
dynamic_sidebar('homepage'); //my sidebar id is 'homepage'
$sidebar_contents = ob_get_clean();

$widgetidspart1 = explode('nd_home_',$sidebar_contents); //my widgets ids start with nd_home_
for ($i = 1; $i < count($widgetidspart1); $i++) {
    $widgetidspart2 = explode('" ', $widgetidspart1[$i] );
    $widgetids[] = $widgetidspart2[0]; //id without nd_home_
}

//add nd_home_ to every widget id
foreach ( $widgetids as $id) {
    $widgetids_total[] = 'nd_home_' . $id;
}

//now I have all the ids in $widgetids_total. I can get the widget data:

foreach( $widgetids_total as $id ) {

    $option_name = $wp_registered_widgets[$id]['callback'][0]->option_name;

    $key = $wp_registered_widgets[$id]['params'][0]['number'];
    $widget_data = get_option($option_name);

    $data[] = $widget_data[$key];
}

//$data contains my widgets data