#php #wordpress #advanced-custom-fields #wordpress-gutenberg
Вопрос:
Я создал пользовательский блок, используя acf_register_block_type();
функцию ACF, он отлично работает на панели управления WordPress (редактор блоков), он показывает данные полей и все хорошо.. но в интерфейсе (страница просмотра) поля ПУСТЫ. любая помощь о том, как отображать данные полей в интерфейсе??
functions.php код:
add_action('acf/init', 'my_acf_init_block_types');
function my_acf_init_block_types()
{
// Check function exists.
if (function_exists('acf_register_block_type')) {
// register a hero block.
acf_register_block_type(array(
'name' => 'banner',
'title' => __('Banner'),
'description' => __('A custom hero block.'),
'render_callback' => 'my_acf_block_render_callback',
'category' => 'home-sections',
'icon' => 'cover-image',
'keywords' => array('basic', 'banner')
));
}
}
function my_acf_block_render_callback($block)
{
// convert name ("acf/hero") into path friendly slug ("hero")
$slug = str_replace('acf/', '', $block['name']);
// include a template part from within the "template-parts/block" folder
if (file_exists(get_theme_file_path("/template-parts/blocks/content-{$slug}.php"))) {
include(get_theme_file_path("/template-parts/blocks/content-{$slug}.php"));
}
}
function wpdocs_mytheme_block_styles()
{
wp_enqueue_style('admin-css', get_stylesheet_directory_uri() . '/build/css/styles.min.css', '', '0.0.3');
wp_enqueue_script('admin-js', get_template_directory_uri() . '/build/js/scripts.min.js', array('jquery'), '0.0.3', true);
}
add_action('enqueue_block_editor_assets', 'wpdocs_mytheme_block_styles')
banner.php код:
<?php
$title = get_field('main_title');
$img = get_field('background_image');
$button = get_field('button');
?>
<section id="banner-section" style=" background-image:linear-gradient( rgba(67, 74, 122, 0.5), rgba(67, 74, 122, 0.5) ), url('<?= $img['url']; ?>');">
<div class="container">
<div class="row justify-content-center">
<div class="col-12 col-lg-10 text-center">
<h1 class="basic-slider-heading"> <?php echo $title ?> </h1>
<?php
if ($button) :
$button_url = $button['url'];
$button_title = $button['title'];
$button_target = $button['target'] ? $button['target'] : '_self';
?>
<button class="btn btn-shadow-malibu btn-bg-malibu-gradient bg-malibu-accent">
<a href="<?= $button_url ?>" target="<?= $button_target; ?>"><?= $button_title ?></a>
</button>
<?php endif; ?>
</div>
</div>
</div>
</section>
var_dump( get_field('main_title'));
Примечание: Я использую WordPress v5.7.2 и ACF PRO v5.9.8
Комментарии:
1. У меня точно такая же проблема с использованием аналогичного кода. Из моего понимания блоков ACF, используемых в редакторе блоков, $post_id не используется. В данном случае это одна и та же страница, просто разница в интерфейсном и фоновом рендеринге.
Ответ №1:
Это документация get_field: https://www.advancedcustomfields.com/resources/get_field/
Обратите внимание, что существует необязательный второй параметр
$post_id (смешанный) (необязательно) Идентификатор записи, в котором сохраняется значение. По умолчанию используется текущая должность.
Итак, если ваша функция работает в одном месте, а не в другом, то между этими двумя страницами существуют различия в окружающей среде. Возможно, что в пользовательском интерфейсе технически не выбирается запись, и в этом случае вам нужно передать идентификатор записи, поле которой вы собираетесь получить.