Как получить доступ к дополнительным значениям настраиваемых полей в блоке Гутенберга? - PullRequest
1 голос
/ 07 мая 2019

У меня есть пользовательский тип записи с несколькими расширенными пользовательскими полями.Я пытаюсь получить доступ к этим значениям настраиваемых полей из блока Гутенберга.

Я добавил следующее в свою register_post_type функцию

    'show_in_rest' => true,
    'supports' => array( 'title', 'editor', 'custom-fields' ),

Я могу успешно получить пользовательские записииз моего блока Гутенберга, используя:

select('core').getEntityRecords('postType', 'customType')

, но я не вижу пользовательских полей или их значений.

Вот JavaScript моего блока:

const { __ } = wp.i18n;
const { registerBlockType } = wp.blocks;
const { withSelect } = wp.data;

registerBlockType('cgb/block-press-block', {
  title: __('Press Block'),
  icon: 'awards',
  category: 'common',
  keywords: [
    __('press-block'),
  ],
  edit: withSelect((select) => {
    return {
      posts: select('core').getEntityRecords('postType', 'press')
    };
  })(({posts}) => {
    return <p>Content</p>;
  }),
});

Есть ли способ доступа к дополнительным значениям поля пользовательской записи на стороне редактора или способ передачи этих данных в блок?

1 Ответ

1 голос
/ 07 мая 2019

Поскольку вы уже используете расширенные настраиваемые поля, можете ли вы вместо самостоятельной регистрации собственного блока использовать acf_register_block вместо этого? Таким образом, вы можете получить доступ к полям из ACF в шаблонах на основе PHP.

Вот несколько полезных ссылок об этом:

Этот код взят из сообщения блога ACF выше и опубликован здесь для полноты в случае изменения вышеуказанной ссылки.

Зарегистрировать блок ACF:

add_action('acf/init', 'my_acf_init');
function my_acf_init() {

    // check function exists
    if( function_exists('acf_register_block') ) {

        // register a testimonial block
        acf_register_block(array(
            'name'              => 'testimonial',
            'title'             => __('Testimonial'),
            'description'       => __('A custom testimonial block.'),
            'render_callback'   => 'my_acf_block_render_callback',
            'category'          => 'formatting',
            'icon'              => 'admin-comments',
            'keywords'          => array( 'testimonial', 'quote' ),
        ));
    }
}

Функция обратного вызова для включения вашего шаблона блока:

function my_acf_block_render_callback( $block ) {

    // convert name ("acf/testimonial") into path friendly slug ("testimonial")
    $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/block/content-{$slug}.php") ) ) {
        include( get_theme_file_path("/template-parts/block/content-{$slug}.php") );
    }
}

HTML-код вашего блока:

<?php
/**
 * Block Name: Testimonial
 *
 * This is the template that displays the testimonial block.
 */

// get image field (array)
$avatar = get_field('avatar');

// create id attribute for specific styling
$id = 'testimonial-' . $block['id'];

// create align class ("alignwide") from block setting ("wide")
$align_class = $block['align'] ? 'align' . $block['align'] : '';

?>
<blockquote id="<?php echo $id; ?>" class="testimonial <?php echo $align_class; ?>">
    <p><?php the_field('testimonial'); ?></p>
    <cite>
        <img src="<?php echo $avatar['url']; ?>" alt="<?php echo $avatar['alt']; ?>" />
        <span><?php the_field('author'); ?></span>
    </cite>
</blockquote>
<style type="text/css">
    #<?php echo $id; ?> {
        background: <?php the_field('background_color'); ?>;
        color: <?php the_field('text_color'); ?>;
    }
</style>

Это создает базовый отзыв блок в качестве простой отправной точки. ACF обрабатывает обработку JavaScript в Gutenberg, поэтому все, что вам нужно сделать, - это беспокоиться о PHP-стороне вещей.

Это означает, что вы можете использовать функции get_field() и the_field(), как мы привыкли ( вентиляторы ACF ). Смешивание ACF и Gutenberg без использования этого собственного способа может вызвать головную боль и, возможно, потребовать подключаемый модуль для доступа к полям через WordPress REST API.

Примечание. Для поддержки ACF для блоков Гутенберга требуется версия ACF 5.8 или выше.

...