web-dev-qa-db-fra.com

Le contenu des appels Yoast SEO Calling filtre 2 fois de plus

J'essayais d'ajouter un filtre de contenu et j'ai découvert que le filtre s'appelait 3 fois au total. J'ai essayé de supprimer lentement tous les plugins et j'ai finalement trouvé que c'était Yoast qui en était la cause. C'est absolument fou. Cela signifie-t-il qu'un filtre de contenu unique est appelé 3 fois à chaque fois? Les problèmes de performances à eux seuls sont très graves. Toute idée de ce qui fait que cela se produise. Ce plugin ne serait sûrement pas publié s'il appelait le contenu 2 fois.

Par exemple. Ce hook en affichera une dans le contenu (sans le plug-in) et 2 fois en haut de la page lorsque Yoast SEO est installé.

add_action( 'the_content', 'outputsomething');
function outputsomething() 
{
    echo "test";
}
2
Dan Hastings

Le cœur de votre problème est que the_content est un filtre, pas une action, et il est supposé renvoyer des valeurs, pas les répercuter.

En ce qui concerne la partie "nombre de fois appelé" de la question, oui, n'importe quel hook peut être appelé nombre de fois illimité. Si vous constatez que vous devez renvoyer un résultat lors du premier appel et un résultat différent pour les autres, c'est un signe que vous faites quelque chose de mal ou d'extrêmement hacky.

2
Mark Kaplun

Vous ne savez pas exactement quelle est votre question, mais oui, pour chaque apply_filters( 'the_content', '...' );, tous les filtres liés seront exécutés. Peu m'importe le nombre de fois que cela se produise, mais le contenu filtré à chaque fois: plus le contenu est important, plus la pénalité de performance est grande.

1
Zlatev

J'ai bien peur de ne pas pouvoir reproduire ce problème. Lancer WP 4.6.1 et Yoast 3.7.1. J'ai ajouté ce qui suit au fichier de fonctions de mon installation test:

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

Cela conduit à tout mon contenu en sortie test123test456test789. Donc, ma conclusion est que ce comportement n'est pas déclenché uniquement par la combinaison d'une nouvelle installation WP et de Yoast. J'ai utilisé un plugin de profilage, qui indiquait que les fonctions ne fonctionnaient qu'une fois pour chaque appel de the_content. Quelque part ailleurs, peut-être dans votre thème, quelque chose déclenche the_content plusieurs fois.

0
cjbj