2014-09-24 77 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