gpt4 book ai didi

wordpress - 如何访问古腾堡 block 中的高级自定义字段值?

转载 作者:行者123 更新时间:2023-12-04 17:37:41 24 4
gpt4 key购买 nike

我有一个带有一些高级自定义字段的自定义帖子类型。我正在尝试从 Gutenberg 块中访问这些自定义字段值。

我已将以下内容添加到我的 register_post_type 中功能

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

我可以使用以下方法从我的 Gutenberg 块中成功检索自定义帖子:
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>;
}),
});

有没有办法在编辑器端访问自定义帖子的高级字段值或将该数据传递给块的方法?

最佳答案

由于您已经在使用高级自定义字段,您是否可以使用 acf_register_block 而不是独立注册自己的块?反而?这样您就可以在基于 PHP 的模板中访问来自 ACF 的字段。

这里有一些关于此的有用链接:

  • ACF 5.8 – Introducing ACF Blocks for Gutenberg
  • acf_register_block()

  • 此代码取自上面的 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 在 Gutenberg 内处理 JavaScript,因此您所要做的就是担心 PHP 方面的事情。

    这意味着您可以使用 get_field() the_field() 功能就像我们(ACF 粉丝)习惯的那样。在不使用这种原生方式的情况下混合 ACF 和 Gutenberg 可能会导致头痛,并且可能需要插件才能通过 WordPress REST API 访问字段。

    注意:古腾堡块的 ACF 支持需要 ACF 5.8 或更高版本。

    关于wordpress - 如何访问古腾堡 block 中的高级自定义字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56029474/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com