古腾堡自定义阻止php渲染问题

时间:2018-12-07 07:36:49

标签: wordpress wordpress-gutenberg gutenberg-blocks

我正在为WordPress Gutenberg编辑器创建一些自定义动态块(此link之后)。

我将PHP渲染器用于这些块,这意味着我保存了以下代码:

save: function( props ) {
    // Rendering in PHP
      return;

},

render函数通过以下回调调用:

register_block_type( 'my-plugin/latest-post', array(
    'render_callback' => 'my_plugin_render_block_latest_post',
) );

我不会发布功能代码,因为在这种情况下无关紧要。 (我做 WP_Query并显示一些自定义帖子数据并返回html代码),

我的问题是WP Gutenberg从函数中获取输出并添加 <p> and <br>标签(经典的wpautop行为)。

我的问题是:如何仅对自定义块禁用该功能?我可以使用:

remove_filter( 'the_content', 'wpautop' );

但我不想更改默认行为。

一些其他发现。用于块渲染的php函数使用get_the_excerpt()。一旦使用了此功能(并且我假设发生在get_the_content()上),就会应用wpautop过滤器,并且该块的html标记会混乱。

我不知道这是错误还是预期的行为,但是有没有解决此问题的简单方法,而无需删除过滤器? (对于前主题森林,不允许删除此过滤器。)

1 个答案:

答案 0 :(得分:3)

默认情况下,我们有

add_filter( 'the_content', 'do_blocks', 9 );
add_filter( 'the_content', 'wpautop' );
add_filter( 'the_excerpt', 'wpautop' );
...

我浏览了do_blocks()src),如果我理解正确的话,如果内容包含任何块,它将删除wpautop过滤,但是会为随后的任何{{1 }}用法。

我想知道您的渲染块回调是否包含任何此类后续用法,就像您提到的the_content()循环一样。

例如尝试:

WP_Query

在您的$block_content = ''; remove_filter( 'the_content', 'wpautop' ); // Remove the filter on the content. remove_filter( 'the_excerpt', 'wpautop' ); // Remove the filter on the excerpt. ... code in callback ... add_filter( 'the_content', 'wpautop' ); // Restore the filter on the content. add_filter( 'the_excerpt', 'wpautop' ); // Restore the filter on the excerpt. return $block_content; 回调代码中。