Yoast SEO呼叫内容过滤器额外2次

时间:2016-04-25 作者:user1889580

我试图添加一个内容过滤器,发现该过滤器总共被调用了3次。我试着慢慢删除所有插件,最终发现是Yoast导致了这种情况。这简直是疯了。这意味着任何一个内容过滤器每次都会被调用3次?单是性能问题就非常糟糕。知道是什么导致了这一切。如果这个插件调用内容两次,肯定不会发布。

例如这个钩子将在内容中显示一个(它在没有安装插件的情况下执行此操作),并在安装Yoast SEO时在页面顶部再显示两次。

add_action( \'the_content\', \'outputsomething\');
function outputsomething() 
{
    echo "test";
}

3 个回复
SO网友:Mark Kaplun

你的问题的核心是the_content 过滤器不是一个操作,它应该返回值,而不是回显值。

至于问题的“调用次数”部分,是的,任何钩子都可以调用无限次。如果您发现在第一次通话时需要返回一个结果,而在其他通话中需要返回不同的结果,则表明您做错了什么或非常不正常。

SO网友:Z. Zlatev

不知道你的问题到底是什么,但是的apply_filters( \'the_content\', \'...\' ); 将执行所有挂钩过滤器。我不在乎这种情况发生了多少次,而是在乎每次过滤的内容是什么——内容越多,性能损失就越大。

SO网友:cjbj

恐怕我无法再现这个问题。运行WP 4.6.1和Yoast 3.7.1。我在测试安装的函数文件中添加了以下内容:

add_action( \'the_content\', \'wpse224783_action\');
function wpse224783_action() 
    { echo "test123"; }

add_filter( \'the_content\', \'wpse224783_filter\');
function wpse224783_filter($content) 
    { echo "test456" ; return $content . "test789" }
这将导致我的所有内容输出test123test456test789. 因此,我的结论是,这种行为不仅仅是由新的WP安装和Yoast的组合触发的。我使用了一个分析插件,它指示函数在每次调用the_content. 在其他地方,可能在你的主题中,有什么东西正在触发the_content 多次。