web-dev-qa-db-fra.com

Yoast SEO s'accroche

J'ai des modèles dynamiques où je dois personnaliser les liens canoniques.

Selon la documentation de Yoast, le hook à utiliser est wpseo_canonical

J'ai deux fonctions pointant vers différentes pages ID:

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

Ensuite, j'ai un autre:

add_filter('wpseo_canonical', 'detailpagecanonical');
function detailpagecanonical($string) {
   if (is_page(2)){
       //I do my stuff here
       return 'http://canonicalurl2.com'
   }
}

Le problème que je rencontre est que si les deux filtres ont la même priorité, comme dans l'exemple, ils ne fonctionnent tout simplement pas. Si j'ajoute 10, 1 au premier, cela fonctionnera, mais en second lieu. Si j'ajoute 20, 1 à la seconde, cela fonctionnera mais le premier cessera de fonctionner et ainsi de suite.

Y a-t-il un moyen de faire cela de manière à ce qu'ils ne se prennent pas de la sorte?

Merci.

1
Jaypee

Les filtres doivent être renvoyés même si votre condition échoue. Vous ne renvoyez actuellement la sortie que lorsque votre condition est remplie, et non lorsqu'elle échoue.

return $string; à la fin de chaque fonction devrait résoudre votre problème.

EXEMPLE

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

Le problème est que dans le filtre, vous devriez toujours renvoyer une valeur. Si vous n'avez pas à changer la valeur transmise, vous devez la renvoyer.

2
Mark Kaplun