Gutenberg-如何在后台正确执行AJAX请求

时间:2018-10-21 作者:Marvin3

我有一个前端带有服务器端渲染的简单块。

PHP:

register_block_type( \'some/block\', array(   
    \'render_callback\' => \'render_my_block\',
    \'attributes\' => array(
        \'stuff\' => array(

        )
    )
));

function render_my_block( $attributes ) {
  // $attributes[\'stuff\']
  return \'<h1>Hello frontend</h1>\';
}
这是可行的,但我还需要在管理区域将其呈现为预览,因此我添加了JS:

registerBlockType( \'some/block\', {

    title: \'Some block\',

    attributes: {
        stuff : {

        }
    },

    edit( { className, attributes, setAttributes } ) {
        return (
            <Fragment>
                <SomeInput />
                <SomeOtherInput />
                <Preview>
                    // I need to get contents of PHP function render_my_block here, 
                   // based on current attributes.stuff
                </Preview>
            </Fragment>
        );
    },

    save( { attributes } ) {
        return null; // server side
    }

} );
我的问题是——获取这些数据的正确方法是什么?我应该使用wp_ajax_ 回调/筛选?或者古腾堡有更好的方法来处理这个问题?

我已经检查了默认的“最新帖子”块的工作原理——它使用Rest API获取帖子ID和标题,然后通过react呈现它们。但对于我的情况,我只需要返回简单的HTML字符串。

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

如果希望这样做,则需要使用<ServerSideRender /> 中的组件edit 方法

这是一个基于您提供的PHP块注册代码的基本实现。

import { ServerSideRender } from \'@wordpress/components\';

registerBlockType( \'some/block\', {

    title: \'Some block\',

    attributes: {
        stuff : {

        }
    },

    edit( { className, attributes, setAttributes } ) {
        return (
            <Fragment>
                <SomeInput />
                <SomeOtherInput />
                <ServerSideRender
                    block="some/block"
                    attributes={ {
                        stuff: attributes.stuff
                    } }
                 />
            </Fragment>
        );
    },

    save( { attributes } ) {
        return null; // server side
    }

} );
The<ServerSideRender /> 组件将允许您调用render_callback 最初在编辑模板中用PHP注册块时提供。这个attributes 传递给组件的对象将作为传递给回调的唯一函数参数提供。

全面披露WP Codex says this 关于使用<ServerSideRender /> 组成部分:

服务器端渲染是指回退;总是首选JavaScript中的客户端渲染(客户端渲染速度更快,允许更好的编辑器操作)。

结束

相关推荐

为什么我不能通过AJAX获取自定义字段值或帖子ID?

我编写了一个基于访问者位置生成链接的代码,它工作得很好,但我发现生成的代码会被缓存,因为我使用的是全页缓存,所以我认为为了解决这个问题,我可以使用ajax加载该链接。我使用了下面的代码,这些代码在获取一些我需要的变量时非常有效,例如位置变量和链接域变量等。。但是,我无法获取WooCommerce自定义字段数据,甚至无法获取产品id,它只返回空白。我使用这段代码来获取自定义字段,该字段在函数中直接使用时效果很好,但在ajax中无法正常工作$uk_asin = get_post_meta(get_post()