自定义ACF块仅将注释的JSON输出到DOM

时间:2021-07-22 作者:gp22

我创建了几个自定义ACF块,除一个块外,其他所有块都正常工作。尤其是这一个,它只将注释掉的JSON输出到DOM。

下面是它显示的内容(删除一些字符串值以保持客户端匿名)。

<!-- wp:acf/button {
    "id": "block_60dba85ef281c",
    "name": "acf\\/button",
    "data": {
        "button_background": "purple",
        "_button_background": "field_6061da93a6d15",
        "button_text": "",
        "_button_text": "field_606227d36073e",
        "button_link_target": {
            "title": "",
            "url": "https:\\/\\/\\/",
            "target": ""
        },
        "_button_link_target": "field_6061dc177bf40",
        "open_in_new_tab": "0",
        "_open_in_new_tab": "field_6061dc7d1fa44",
        "block_background": "purple",
        "_block_background": "field_606a59f7086ae",
        "button_alignment": "center",
        "_button_alignment": "field_606a5a8a98021"
    },
    "align": "",
    "mode": "preview"
} /-->
我在中注册了此块register_acf_block_types() 以同样的方式,我注册了所有其他块,并验证了模板文件存在并且没有任何错误。它只显示一个简单样式的锚定标记。

我注意到的一件事是"mode": "preview" 最后一行。但是这个区块已经发布了。

如果你能对此有所了解,我将不胜感激。不太确定从哪里看这一点。

1 个回复
SO网友:Vladimir

我也面临着同样的问题,在我的情况下,导致我这个问题的问题和往常一样愚蠢。

对于那些面临类似问题的人,请检查acf_register_block_type 功能:

acf_register_block_type( array(
    \'name\'          => \'theme-block-jobbz\',
    \'title\'         => __( \'Title\', \'client\' ),
    \'enqueue_style\' =>  \'template-parts/blocks/block_jobBz/block.css\',
    \'render_template\'   => \'template-parts/blocks/block_jobBz/block.php\',
    \'category\'      => \'Category\',
    \'icon\'          => \'html\',
    \'mode\'          => \'preview\',
    \'keywords\'      => array(\'keyword\'),
));
注意你的身体render_template 路径,请尝试使其与上面代码段中显示的相对。而不是像这样:\'render_template\' => get_template_directory_uri() . \'/template-parts/blocks/block_jobBz/block.php\',

或者,您可以使用\'render_callback\' => \'render_test\',, 并在其他地方声明函数:

        function render_test() { ?>
           <div></div>
        <?php }
请记住,您可以使用ACF 还将应用和样式表中的函数。

在页面模板或其他地方,the_content() 应该可以轻松地输出页面的内容,包括所有块。此外,您还可以尝试以下操作:

$blocks = parse_blocks( $post->post_content );
foreach( $blocks as $block ) {
    echo render_block( $block );
}
如果您正在使用render_template, 同时仔细检查您的php 文件:

<?php

/**
 * Random Block Template.
 *
 * @param   array $block The block settings and attributes.
 * @param   string $content The block inner HTML (empty).
 * @param   bool $is_preview True during AJAX preview.
 * @param   (int|string) $post_id The post ID this block is saved to.
 */


?>

<div>Content</div>
我不确定它是否完全解决了您的问题,但可能对将来面临这一问题的其他人有所帮助。

相关推荐