2014-09-24 63 views
0

wp_get_sidebars_widgets()是非常有用的获得有关小工具在侧边栏的信息。然而,WP codex声明它是一个私有函数,不能用于主题开发......这就是我的具体情况。有什么选择?如何在没有它的情况下获取小部件信息?我想用dynamic_sidebar()和一些PHP,但我不知道如何,真的。WordPress的:替代wp_get_sidebars_widgets主题发展

我想要得到的是:

  • 小部件标识(这告诉我已用空间的小部件)。
  • 用户在表单中输入的小部件数据。

谢谢!

回答

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