web-dev-qa-db-ja.com

あなた自身をオーバーライドするYoast SEOフック

正規リンクをカスタマイズする必要がある動的テンプレートがいくつかあります。

Yoastのドキュメントによると、使うべきフックはwpseo_canonicalです。

異なるページIDを指す2つの関数があります。

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'
   }
}

私が抱えている問題は、例のように両方のフィルタが同じ優先順位を持っている場合、それらが単純に機能しないということです。 20、1、2を足してもうまくいきますが、最初はうまくいきません。

彼らがそのように自分自身を上書きしないような方法でこれを行う方法はありますか?

ありがとう。

1
Jaypee

あなたの状態が失敗してもフィルタは返されるべきです。現在は、条件が満たされたときに出力を返すだけで、失敗したときには返されません。

各関数の最後にある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;
}
3
Max

問題は、filterでは常に値を返すべきであるということです。渡される値を変更する必要がない場合は、それを返すべきです。

2
Mark Kaplun