Как получить содержимое виджета WordPress

Как выяснилось в WP нет стандартной функции, которая возвращает содержимое виджета. Есть функция dynamic_sidebar, но она только выводит это содержимое. Сохранить значение в переменную невозможно.

(Поправка) Утверждение выше, конечно же, неверное. В PHP можно записать вывод на экран в переменную с помощью функции ob_start().

Мне же нужно перед выводом виджета определенным образом его обработать, а уже потом вывести.

Решение я такое нашел. Может кому-нибудь пригодится, а то мне пришлось 2 часа разбираться, пока понял, как сделать.

Виджеты хранятся в таблице options. Таким образом сначала получаем их с помощью функции get_option(‘widget_mywidget’).

Как я понял, все виджеты одного типа, например, текстового, хранятся в одной переменной в виде массива. Так, текстовые переменные хранятся в переменной widget_text, то есть массив с такими элементами получаем через следующий вызов — get_option(‘widget_text’).

Если у вас данные хранятся в виджете другого типа, но нужно сначала понять, в какой переменной они хранятся. Сделать это можно сделав поиск части содержимого вашего виджета в таблице options.

Каждый элемент полученного массива содержит вложенный массив. Там есть элемент title — заголовок виджета и text — его содержимое (то, что мне было нужно).

Остается только найти нужный элемент в массиве. Я ищу по его заголовку, у меня это «Баннеры»
Код получился такой:

В переменной $ban в итоге оказывается нужное мне содержимое.

Оцените статью
Делаем сайт своими руками
Комментарии: 2
  1. Виктор

    Огромная благодарность Вам!

    Еще такие вопросы:
    1. Как выводить содержимое текстового виджета по его ID
    2. Как выводить содержимое других виджетов, например этого виджета: WP Editor Widget — https://ru.wordpress.org/plugins/wp-editor-widget

    3. Где подробно посмотреть о возможных параметрах: get_option(‘widget_text’);

    Ответить
  2. Виктор

    С пунктами 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

    Ответить
Добавить комментарии