古腾堡自定义阻止 php 渲染问题
Posted
技术标签:
【中文标题】古腾堡自定义阻止 php 渲染问题【英文标题】:Gutenberg custom blocks php render issue 【发布时间】:2019-05-08 23:05:29 【问题描述】:我正在为 WordPress Gutenberg 编辑器创建一些自定义动态块(在此 link 之后)。
我对这些块使用 php 渲染,这意味着我保存了这段代码:
save: function( props )
// Rendering in PHP
return;
,
通过这个回调调用渲染函数:
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 标记会变得混乱。
我不知道这是一个错误还是预期的行为,但有没有不涉及删除过滤器的简单解决方案? (例如,主题森林中的 ex 不允许删除此过滤器。)
【问题讨论】:
这是否只发生在您的自定义块中? wpautop 是否在回调中隐式使用? 刚刚编辑:我发现当您在 php 渲染函数上使用 get_the_excerpt 时会发生这种情况。 【参考方案1】:我们默认有:
add_filter( 'the_content', 'do_blocks', 9 );
add_filter( 'the_content', 'wpautop' );
add_filter( 'the_excerpt', 'wpautop' );
...
我浏览了do_blocks()
(src),如果我理解正确,它会在内容包含任何块时删除wpautop
过滤,但会为任何后续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;
在您的 my_plugin_render_block_latest_post()
回调代码中。
【讨论】:
我刚刚编辑了这个问题:这是因为我正在使用 get_the_excerpt() @Crerem 默认情况下,摘录也通过wpautop()
过滤,我更新了答案。
是的,但是当您在短代码中使用它时,您不会得到这种行为。所以我在这里期待同样的事情。删除过滤器解决方案有效,完全有意义,但不允许在 WordPress 存储库或 themeforrest 上使用。这就是我试图寻找替代解决方案的原因。谢谢
感谢您提供额外信息,但我们会在返回内容之前恢复临时删除的过滤器,以免影响之后的其他调用。您是否有一个链接,其中解释了为什么那里不允许这样做,这将提供信息,谢谢。您还可以分享短代码示例吗? @Crerem 另一种方法是获取原始字段,例如通过get_post_field( 'post_excerpt' );
@Crerem 在 WordPress 插件目录中有 150 个匹配项(133 个插件)从摘录中删除了 wpautop
过滤器(并且很可能像我们在这里所做的那样再次添加它),请参阅扫描here。还有 424 个插件对内容执行相同的操作,例如喷气背包。见扫描here。所以这是插件和核心中广泛使用的方法。以上是关于古腾堡自定义阻止 php 渲染问题的主要内容,如果未能解决你的问题,请参考以下文章