Как отображать поля ACF в пользовательском блоке Gridbuilder

Вопрос или проблема

Я использую GridBuilder WP (отличный плагин, средняя поддержка), чтобы показать сетку пользовательского типа записи. В конечном итоге, мне нужно показать таксономическое поле ACF, и их поддержка рекомендовала использовать один из их удобных пользовательских блоков, однако в данный момент я просто пытаюсь показать текстовое поле (в качестве теста) в пользовательском блоке. Это предложенный код, но он всегда показывает метку “Email” с пустым полем, несмотря на то, что выше имеется обычный блок, успешно показывающий пользовательское поле.

add_filter(
    'wp_grid_builder/blocks',
    function( $blocks ) {

        $blocks['email_block'] = [
            'name'            => __( 'Email block', 'text-domain' ),
            'render_callback' => function() {

                // Get email from ACF field.
                global $post;
                $post = wpgb_get_post();
                setup_postdata( $post );
                $email = get_field('email');

                if( $email ) {
                    printf(
                        '<a href="mailto:%1$s" rel="external noopener noreferrer" target="_blank">%2$s</a>',
                        esc_attr( rawurlencode( $email ) ),
                        esc_html( 'Email' )
                    );              
                }
                wp_reset_postdata();
                

            },
        ];

        return $blocks;

    }
);

Кто-то смог показать пользовательские поля в пользовательском блоке Gridbuilder WP?

Не уверен, что вы уже решили вашу проблему, но я в подобной ситуации. Вы можете взглянуть на эту веб-страницу для получения рекомендаций:

https://wpdevdesign.com/how-to-create-custom-blocks-in-wp-grid-builder/

.

Ответ или решение

Как отобразить ACF поля в GridBuilder Custom Block

Использование GridBuilder WP для создания сетки из пользовательских типов записей является мощным инструментом, особенно в сочетании с Advanced Custom Fields (ACF). Однако интеграция этих двух плагинов может вызывать вопросы, особенно при отображении полей ACF в пользовательском блоке. Давайте рассмотрим, как решить эту задачу, опираясь на предоставленный код и обеспечивая корректное отображение данных.

Анализ текущего подхода

Ваш текущий код использует фильтр wp_grid_builder/blocks для регистрации пользовательского блока. Однако отображение поля электронной почты, похоже, не работает должным образом. Присмотримся к основным элементам:

  • Имена переменных и их инициализация: Переменная $post получает значение через функцию wpgb_get_post(), но необходимо убедиться, что она инициализирована корректно и возвращает нужный объект записи.
  • Использование get_field(): Функция get_field('email') использует стандартный API ACF для получения значения поля, но нужно убедиться, что идентификатор поля (“email”) совпадает с настроенным в ACF.
  • Работа с данными: Форматирование и отображение данных происходит внутри условия if( $email ), однако вам нужно проверить, что данные действительно существуют и считываются перед их выводом.

Решение проблемы

Чтобы исправить текущее поведение и добиться корректного отображения данных поля ACF, попробуйте выполнить следующие шаги:

  1. Проверка корректности метаполя: Убедитесь, что поле “email” действительно существует и настроено в соответствующей группе в ACF. Проверьте, с какой записью оно связано.
  2. Диагностика отладки: Временно добавьте var_dump($post); или var_dump($email); прямо перед условием if($email), чтобы убедиться в получении корректных данных.
  3. Убедитесь в правильности настройки GridBuilder: Проверьте, что в настройках GridBuilder используется правильный шаблон для поста, который соответствует настройке блока с учетом поля “email”.
  4. Корректировка вывода данных: Вместо жёстко закодированной строки “Email” используйте динамический контент. Это позволит вам отобразить фактические значения, считанные из ACF, так как строка “Email” может вводить в заблуждение.

Вот обновлённый подход к выводу данных:


add_filter(
    'wp_grid_builder/blocks',
    function($blocks) {
        $blocks['email_block'] = [
            'name' => __('Email block', 'text-domain'),
            'render_callback' => function() {
                global $post;
                $post = wpgb_get_post();
                setup_postdata($post);

                $email = get_field('email');

                if ($email) {
                    printf(
                        '<a href="mailto:%1$s" rel="external noopener noreferrer" target="_blank">%1$s</a>',
                        esc_html($email)
                    );
                }

                wp_reset_postdata();
            },
        ];

        return $blocks;
    }
);

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

Напоминаем, что данный подход необходимо адаптировать в зависимости от структуры ваших данных и текущих настроек ACF и GridBuilder WP.

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

Капча загружается...