ServerSideRender不在Gutenberg块内呈现“预览”html

时间:2020-06-13 作者:Woody

在过去的两天里,我一直在用这个来拉扯我的头发,搜索并没有找到任何解决问题的方法。

我想用<serverSideRender /> 在前端加载动态内容,并在Gutenberg编辑器中查看生成的内容。我用Gutenberg doc page.

以下是JS代码:

const { registerBlockType }                 = wp.blocks;
const { serverSideRender }                  = wp.serverSideRender

registerBlockType( \'gutenberg-examples/example-dynamic\', {
    title: \'Example: last post\',
    icon: \'megaphone\',
    category: \'widgets\',

    edit: function( props ) {

        return [

            <p>serverSideRender should appear here:</p>,
            <serverSideRender
                block="gutenberg-examples/example-dynamic"
                attributes={ props.attributes }
            />
        ];
    },
} );
PHP代码:

function gutenberg_examples_dynamic_render_callback( $attributes, $content ) {
    $recent_posts = wp_get_recent_posts( array(
        \'numberposts\' => 1,
        \'post_status\' => \'publish\',
    ) );
    if ( count( $recent_posts ) === 0 ) {
        return \'No posts\';
    }
    $post = $recent_posts[ 0 ];
    $post_id = $post[\'ID\'];
    return sprintf(
        \'<a class="wp-block-my-plugin-latest-post" href="%1$s">%2$s</a>\',
        esc_url( get_permalink( $post_id ) ),
        esc_html( get_the_title( $post_id ) )
    );
}

function gutenberg_examples_dynamic() {

    register_block_type( \'gutenberg-examples/example-dynamic\', array(
        \'render_callback\' => \'gutenberg_examples_dynamic_render_callback\'
    ) );

}
add_action( \'init\', \'gutenberg_examples_dynamic\' );
前端按预期显示立柱。以下屏幕截图:

enter image description here

但在古腾堡,积木并不显示动态内容。理论上,我应该看到与前端相同的东西,对吗?还是我遗漏了什么?

这是我在古腾堡看到的:

enter image description here

如您所见,没有呈现任何动态内容,控制台中也没有任何错误。

我做错了什么?任何帮助都将不胜感激。

提前感谢

2 个回复
SO网友:Woody

好吧,在花了一整天的时间搜索和阅读之后,我找到了解决方案。看来ServerSideRender 应从wp.componentsNOT 从…起wp.serverSideRender

更换后

const { serverSiderRender: ServerSideRender }   = wp.serverSideRender;
使用

const { ServerSideRender } = wp.components;
以及

// <serverSideRender
<ServerSideRender 
    block="gutenberg-examples/example-dynamic"
    attributes={ props.attributes }
/>
现在一切正常

enter image description here

希望这对别人有帮助。谢谢

SO网友:Welcher

您必须别名serverSideRender才能在JSX中使用它。

const { serverSiderRender: ServerSideRender } = wp.serverSideRender

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。