Вопрос или проблема
Я использую 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, попробуйте выполнить следующие шаги:
- Проверка корректности метаполя: Убедитесь, что поле “email” действительно существует и настроено в соответствующей группе в ACF. Проверьте, с какой записью оно связано.
- Диагностика отладки: Временно добавьте
var_dump($post);
илиvar_dump($email);
прямо перед условиемif($email)
, чтобы убедиться в получении корректных данных. - Убедитесь в правильности настройки GridBuilder: Проверьте, что в настройках GridBuilder используется правильный шаблон для поста, который соответствует настройке блока с учетом поля “email”.
- Корректировка вывода данных: Вместо жёстко закодированной строки “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.