WordPress: альтернатива wp_get_sidebars_widgets для разработки тем

wp_get_sidebars_widgets() очень полезно для получения информации о виджетах на боковой панели. Тем не менее, кодекс WP гласит, что это частная функция, не предназначенная для разработки тем … что, в частности, и есть мой случай. Какие есть альтернативы? Как получить информацию о виджетах без него? Я думаю с dynamic_sidebar() и немного PHP, но я не вижу, как, на самом деле.

Что я хочу получить это:

  • идентификаторы виджетов (которые информируют меня о том, какой виджет был использован).
  • данные виджетов вводятся пользователем в форму.

Спасибо!

0

Решение

Итак, я нашел решение, но это похоже на взлом. Если кто-то знает что-то лучше …

Идентификатор моей боковой панели ‘homepage’, и все мои идентификаторы виджетов начинаются с моего префикса, 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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]