Получение значений из виджета

Обзор

Все шаблонные функции (get_field, the_field, и т. д.) можно использовать для загрузки значений из виджета, однако для обращения к нужному виджету требуется второй параметр. Это похоже на передачу параметра $post_id для обращения к конкретному объекту записи.

Необходимый параметр $post_id — это строка, содержащая слово ‘widget_’ и ID виджета в следующем формате: "widget_{$widget_id}"

Чтобы вывести значения пользовательских полей внутри виджета, вам нужно использовать фильтр, чтобы изменить HTML-аргументы. Если виджет создан вручную, вы также можете настроить HTML-вывод в функции widget в классе вашего виджета.

Требования

Для пользовательских полей в комментариях требуется как минимум ACF версии 5

Примеры

Использование базового параметра

В этом примере показано, как второй параметр используется для обращения к конкретному комментарию.

<p><?php the_field('field_name', 'widget_' . $widget_id); ?></p>

Базовая настройка виджета

В этом примере показано, как настроить виджет ‘Text’, чтобы он отображался с цветным фоном и показывал изображение. Поскольку виджеты пока не содержат действий или callback-функций для добавления дополнительного HTML, нам нужно использовать фильтр (dynamic_sidebar_params), чтобы изменить HTML before_widget и after_widget.

Следующий код размещается в файле functions.php.

add_filter('dynamic_sidebar_params', 'my_dynamic_sidebar_params');

function my_dynamic_sidebar_params( $params ) {
    
    // получаем данные виджета
    $widget_name = $params[0]['widget_name'];
    $widget_id = $params[0]['widget_id'];
    
    
    // выходим заранее, если этот виджет не является виджетом Text
    if( $widget_name != 'Text' ) {
        
        return $params;
        
    }
    
    
    // добавляем стиль цвета к before_widget
    $color = get_field('color', 'widget_' . $widget_id);
    
    if( $color ) {
        
        $params[0]['before_widget'] .= '<style type="text/css">';
        $params[0]['before_widget'] .= sprintf('#%s { background-color: %s; }', $widget_id, $color);
        $params[0]['before_widget'] .= '</style>';
        
    }
    
    
    // добавляем изображение к after_widget
    $image = get_field('image', 'widget_' . $widget_id);
    
    if( $image ) {
        
        $params[0]['after_widget'] = '<img src="' . $image['url'] . '">' . $params[0]['after_widget'];        
    }

    
    // возвращаем
    return $params;

}

Обновлено: 01.06.2026