是否可以使用内容短码修改标题?

时间:2020-03-19 作者:Dario Zadro

我猜这是不可能的,因为wp_head() 很可能在内容执行之前完成,但下面是一个快速示例,说明我正在尝试执行的操作:

add_shortcode( \'header_content\', function () {
    add_action(\'wp_head\',function () {
        echo \'<meta name="test" content="hello world" />\';
    } );
} );
我的实际用例是让正文内容将JSON-LD添加到标题中。

没有插件,有没有简单而优雅的解决方案?

1 个回复
SO网友:Tom J Nowell

不,当您的快捷码运行时,标题已经通过网络发送,甚至帖子标题。现在更改已发送的内容(即到达之前的所有内容)为时已晚the_content.

有一种方法可以“做到”,但它的成本非常非常高,而且不可靠。在每一页的开头启动一个输出缓冲区,然后在结尾处理该页。然而,这将:

完全cripple TTFB/时间到第一个字节,使页面变慢,消除客户端的所有渐进式渲染,以及网络端的并行化。这可能会对SEO排名产生影响shutdown 钩子,如果永远无法达到此目标,则页面上不会显示任何内容,用户将看到一个完全空白的页面,没有任何标记,这会增加字符串解析HTML的开销,这可能会变得混乱。它需要一个支持基础设施来注册所有要添加的内容,否则,如果您试图刷新短代码中的输出缓冲区,您将无法再次使用该短代码,您要添加的大部分内容将因未通过而被WordPress删除wp_kses_post 保存时。解决这一问题将意味着打开主要的安全漏洞,从根本上说,这不是解决这些问题的方法

相反,如果要将JSON-LD添加到标头中,则应使用PHP代码将其添加到wp_head 钩子,或者如果可能的话,在页脚或页面下方。除了在帖子内容中嵌入不能直接放入帖子内容的内容外,你不应该依赖短代码,例如iframes或像交互式图形这样的花哨javascript功能

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。