Gutenberg:如何在块前端显示元字段数据(保存功能)

时间:2021-11-19 作者:Marc

在我的帖子中有一些遗留的元字段,我想显示在我的块中。我找到了设置元字段的文档,但没有找到如何显示它们。所以我尝试了这个:

export default function save( { attributes } ) {

    const blockProps = useBlockProps.save();

    const postType = useSelect(
        ( select ) => select( \'core/editor\' ).getCurrentPostType(),
        []
    );

    const [ meta, setMeta ] = useEntityProp( \'postType\', postType, \'meta\' );

    const game_meta = meta[ \'_shortscore_game\' ];

    return (
        <p { ...blockProps } >
            <h2><game_meta/></h2>
        </p>
    );
}
我收到以下错误:

钩子调用无效。钩子只能在函数组件的主体内部调用。发生这种情况的原因如下:1。您可能有不匹配的React和TheRender版本(如React DOM)2。你可能违反了《胡克3》的规则。同一应用程序中可能有多个React副本请参见https://reactjs.org/link/invalid-hook-call 有关如何调试和修复此问题的提示。

问题是什么?这是因为

const postType = useSelect(
    ( select ) => select( \'core/editor\' ).getCurrentPostType(),
    []
);
但为什么呢?它在编辑功能中的作用相同。

1 个回复
最合适的回答,由SO网友:stokesman 整理而成

从文档中:https://developer.wordpress.org/block-editor/reference-guides/block-api/block-edit-save/#save

注意:save函数应该是一个纯函数,它只依赖于用于调用它的属性。它不能有任何副作用或从其他来源检索信息,例如,不能使用其中的数据模块select( store ).selector( ... ).这是因为如果外部信息发生更改,则在稍后编辑帖子时,该块可能会被标记为无效(read more about Validation).如果需要保存其他信息,开发人员可以考虑以下两种选择之一:

使用dynamic blocks 并在服务器上动态检索所需的信息

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在