Yoast SEO钩子凌驾于自身之上

时间:2015-09-09 作者:Jaypee

我有一些动态模板,我必须在其中自定义规范链接。

根据Yoast文档,要使用的挂钩是wpseo_canonical

我有两个指向不同页面ID的函数:

add_filter(\'wpseo_canonical\', \'listpagecanonical\');
function listpagecanonical($string) {
    if (is_page(1)){
        //I do my stuff here
        return \'http://canonicalurl.com\'
    }
}
然后我还有一个:

add_filter(\'wpseo_canonical\', \'detailpagecanonical\');
function detailpagecanonical($string) {
   if (is_page(2)){
       //I do my stuff here
       return \'http://canonicalurl2.com\'
   }
}
我遇到的问题是,如果两个过滤器具有相同的优先级,如示例所示,它们根本不起作用,如果我在第一个过滤器上加上10,1,它将起作用,但第二个过滤器不起作用。如果我加20,1到秒,它会工作,但第一个会停止工作,依此类推。

有没有办法做到这一点,使他们不会像那样凌驾于自己之上?

谢谢

2 个回复
最合适的回答,由SO网友:Max 整理而成

即使条件失败,也应返回筛选器。您当前只是在满足条件时返回输出,而不是在条件失败时返回输出。

return $string; 在每个函数结束时,都应该解决您的问题。

示例

add_filter(\'wpseo_canonical\', \'listpagecanonical\');
function listpagecanonical($string) {
    if (is_page(1)){
        //I do my stuff here
        return \'http://canonicalurl.com\'
    }
    return $string;
}

SO网友:Mark Kaplun

问题是,在过滤器中,您应该始终返回一个值。如果不必更改正在传递的值,那么应该返回它。

相关推荐

Apply_Filters(‘the_content’,$Content)与DO_ShortCode($Content)

假设我有一个主题选项或自定义的postmeta文本区域。现在我想执行多个短代码、一般文本、图像等。最佳实践是什么?为什么?选项1:$content = //my text area data; echo apply_filters(\'the_content\', $content); 选项2:$content = //my text area data; echo do_shortcode($content); 请告诉我哪一个是最佳实践,以及为什么。EDIT让我详细描