Проклятый ACF widget plugin

Или — как ВЫВЕСТИ ACF поля виджета на фронтенд?!?

Найти ответ на вопрос «где взять $widget_id» — невозможно. Только здесь и сейчас напишу, как это делается (после полудня мучений).

Всё по порядку!

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

Их есть у Гугла. Плагин виджета ACF качаем тут:

Advanced Custom Fields: Widget

Итак, шаг 1 — скачали, установили и активировали плагин.

После активирования виджет появится среди доступных:

Шаг 2. — ОБЯЗАТЕЛЬНО нужно создать кастомную widget area. Делается это путем копипасты в functions.php следующего кода:

function left_menu_widgets_init() {

register_sidebar( array(
 'name' => 'Left Menu Widget',
 'id' => 'left_menu_1',
 'before_widget' => '',
 'after_widget' => '',
 'before_title' => '',
 'after_title' => '',
 ) );

}
add_action( 'widgets_init', 'left_menu_widgets_init' );

Соответственно ‘name’ — по вашему выбору, название функции тоже можно поменять на более подходящее вашему проекту. После того, как вы зальете на сервер functions.php, у вас в разделе Appearance > Widgets появится еще одна плашка с вашей widget area. Например:

Шаг 3. — Теперь нужно сделать Кастомные поля для вашего виджета. Идете в Custom Fields, делаете все, как обычно, только привязку делаете вот так:

Вы как только слева выберите Widget, как после «равно» автоматически появится это поле. Сохраняем.

Шаг 4. — Создаем отдельный файлик с префиксом sidebar, чтобы включать наш новый виджет, куда захотим. Я создаю файл под именем sidebar-acf_widget.php. Именно в нем мы будем выводить наши ACF-поля!

Привожу тут код аж для репитера:

<?php if ( is_active_sidebar( 'left_menu_1' ) ) : ?>
 <?php if( have_rows('banner', 'widget_acf_widget_4') ): ?>
   <?php while ( have_rows('banner', 'widget_acf_widget_4') ) : the_row(); ?>
    <a href="<?php the_sub_field('banner_link', 'widget_acf_widget_4'); ?>" target="_blank">
     <img src="<?php the_sub_field('banner_image', 'widget_acf_widget_4'); ?>">
    </a>
   <?php endwhile; ?>
 <?php endif; ?> 
<?php endif; ?>

То есть сначала проверяем, заполнен ли наш виджет left_menu_1 (он же Left Menu Widget), потом проверяем, есть ли ряды репитера, если есть, то выводим субполя. У меня — ссылка и картинка банера.
Шаг 5. — Выводим наш виджет где-то в шаблоне. То есть — мы выводим не виджет уже, а сайдбар, то есть файлик sidebar-acf_widget.php. Делается так:

<?php get_sidebar('acf_widget'); ?>

ИТАК, в чем же прикол и сложность? В том, что после всех манипуляций ни черта у вас не выведется. В документации ACF указан следующий код вывода полей через виджет:

<?php the_field("example_field", $widget_id); ?>

И где, чёрт побери, я возьму этот $widget_id!?!

Как вы видите в моем коде, сейчас там стоит значение widget_acf_widget_4. У вас может быть другое. Как его найти?

Берете свой ACF Widget и перетаскиваете в какую-нибудь другую виджет-область, например — в Primary sidebar или Footer Widget Area — куда угодно. Главное, чтобы этот сайдбар у вас отображался на фронте. Когда я перетащила виджет в футер, то получила такую ошибку:

Вот то, что я выделила синим — это и есть $widget_id (widget id)!

Причем даже если вы заполните свои поля в виджете, даже если он выведет картинки и т.п., эта ошибка будет торчать все равно для некастомных сайдбаров. В общем — вытаскиваете айди виджета, вставляете в свой код и перетаскиваете ACF Widget обратно в кастомную Widget Area, в моем случае — в Left Menu Widget.