从面板使用Gutenberg保存/更新post_meta

时间:2019-02-24 作者:Dudo1985

我已经创建了一个块,需要将面板上某个操作的值另存为post\\u meta。

Php端:

add_action( \'init\', \'yasr_gutenberg_show_in_rest_overall_meta\' );

function yasr_gutenberg_show_in_rest_overall_meta() {
    register_meta( \'post\', \'yasr_overall_rating\',
        array(
            \'show_in_rest\' => true,
            \'single\' => true,
            \'type\' => \'number\',
        )
    );
}
然后在js中,我会这样做:

attributes: {
            //name of the attribute
            overallRating: {
                type: \'number\',
                source: \'meta\',
                meta: \'yasr_overall_rating\'
            },
}

edit:
     function( props ) {

                 const { attributes: {overallRating}, setAttributes, isSelected } = props;

                /***
                Action and ajax action to update metadata 
                 and where I use setAttributes to 
                update overallRating
                ***/

     }
一切似乎都正常,但当保存或更新帖子时,总体评分会再次获得初始值,而不是通过ajax调用保存的新值。

我怎样才能做到这一点?

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

由于这个问题和我之前的答案最近更新了,我再次用解决方案回答:

就像swissspidy 他在评论中说,这是因为register_meta 函数(和初始化操作)位于错误的位置。它位于仅在后端调用的文件中(在is_admin())相反,它必须在后端和前端,即使只有古腾堡使用

SO网友:Dudo1985

我发现了这个bughttps://github.com/WordPress/gutenberg/issues/4989

如果一个属性从meta获取数据,然后保存/更新post,那么它总是以未定义的形式返回