Сегодня столкнулся с проблемой получения содержимого виджета.
Как выяснилось в WP нет стандартной функции, которая возвращает содержимое виджета. Есть функция dynamic_sidebar, но она только выводит это содержимое. Сохранить значение в переменную невозможно.
Мне же нужно перед выводом виджета определенным образом его обработать, а уже потом вывести.
Решение я такое нашел. Может кому нибудь пригодится, а то мне пришлось 3 часа разбираться, пока понял, как сделать.
Виджеты хранятся в таблице options. Таким образом сначала получаем их с помощью функции get_option(‘widget_mywidget’).
Как я понял, все виджеты одного типа, например, текстового, хранятся в одной переменной в виде массива. Так, текстовые переменные хранятся в переменной widget_text, то есть массив с такими элементами получаем через следующий вызов – get_option(‘widget_text’).
Если у вас данные хранятся в виджете другого типа, но нужно сначала понять, в какой переменной они хранятся. Сделать это можно сделав поиск части содержимого вашего виджета в таблице options.
Каждый элемент полученного массива содержит вложенный массив. Там есть элемент title – заголовок виджета и text – его содержимое (то, что мне было нужно).
Остается только найти нужный элемент в массиве. Я ищу по его заголовку, у меня это “Баннеры”
Код получился такой:
$w = get_option('widget_text'); // массив элементов foreach ($w as $value ) { if ( $value['title'] == 'Баннеры' ) { $ban = trim($value['text']); // нужное значение break; } }
В переменной $ban в итоге оказывается нужное мне содержимое.
Огромная благодарность Вам!
Еще такие вопросы:
1. Как выводить содержимое текстового виджета по его ID
2. Как выводить содержимое других виджетов, например этого виджета: WP Editor Widget – https://ru.wordpress.org/plugins/wp-editor-widget
3. Где подробно посмотреть о возможных параметрах: get_option(‘widget_text’);
С пунктами 1 и 2 разобрался.
2. Для плагина WP Editor Widget содержимое виджета можно получить задав такие параметры:
$widgets = get_option(‘widget_wp_editor_widget’); // массив виджетов визуального редактора
foreach ($widgets as $value ) {
if ( $value[‘title’] == ‘Заголовок’ ) {
$text = trim($value[‘content’]); // нужный виджет
break;
}
}
echo $text;
3. https://codex.wordpress.org/Справочник_по_функциям/get_option