WordPress - 简码不在古腾堡页面上呈现内容

WordPress - Shortcode is not rendering content on Gutenberg pages

平台用户可以post提供。这些报价显示在 post table.

你可以在这里看到 post table - https://www.b2bmember.com/b2b-marketplace/

Post table 插入简码:[posts_table]

可以通过在末尾添加 author="x"(x= 用户 ID)来仅显示来自特定作者的 post。

示例:[posts_table author="x"]

目标是在每个用户的个人资料页面上显示 post。

我需要一个解决方案,让每个用户在他们的个人资料页面中自动/以编程方式都有一个相应的简码。

为了实现这一点,我创建了一个函数来创建一个与 post table 相同的简码,但在末尾带有 user/author id 部分。

function authorid() {

$author_id = um_user('ID');
echo '[posts_table author="' . $author_id . '"]';
}

add_shortcode('user_offers', 'authorid');

当我在使用 Elementor 页面构建器构建的页面上添加 [user_offers] 时,此解决方案有效 - 成功呈现具有相应作者 posts 的 post table .

但是,如果页面是使用 Gutenberg 构建的,则它不起作用。对于 Gutenberg 页面,它显示 [posts_table author="1"],1 = 用户 ID,具体取决于个人资料页面。因此,post table 简码已正确生成,但未呈现任何内容。

看截图:https://pasteboard.co/K1YR7F7.png

我已尝试将 echo 替换为 return,但这并不能解决问题。

为什么它不适用于使用 Gutenberg/WordPress 块编辑器构建的页面?

我实际上注意到你的简码 return 是一个简码标签 ([posts_table]) 而不是简码输出,所以你应该这样调用 do_shortcode():

return do_shortcode( '[posts_table author="' . $author_id . '"]' );

如果您不这样做,那么古腾堡中的默认行为是 [posts_table] 按原样 return 编辑而不是被解析(例如替换为 table HTML).

尽管我使用 Elementor,但上面的代码应该在 Elementor 中运行良好。

请记住,短代码应始终 return 输出而不是回显;否则,您可能会遇到诸如 REST API 中的无效 JSON 响应之类的问题(例如,这将导致通过使用 REST API).