Или — как ВЫВЕСТИ 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.
You must be logged in to post a comment.