我正在为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标记会混乱。
我不知道这是错误还是预期的行为,但是有没有解决此问题的简单方法,而无需删除过滤器? (对于前主题森林,不允许删除此过滤器。)
答案 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;
回调代码中。