web-dev-qa-db-fra.com

pourquoi add_action ('the_content) remplace-t-il ma page?

Je suis nouveau sur wordpress et j'essaie d'afficher du texte sur des pages spécifiques de mon site Web. Mon problème est que mon plugin remplace mon contenu actuel sur cette page par celui de mon plugin. Comment puis-je faire en sorte que le plugin ne remplace pas le contenu de la page.

add_action( 'the_content', "displayNewsSlider");
function displayNewsSlider(){
  if (is_page('sample-page')){
  echo "plugin content 1";
  echo "plugin content 2";
  }
}
1
iani garthalski

Il y a une différence subtile entre les crochets d'action et les filtres . Le plus notable est que les fonctions de filtre doivent recevoir une valeur et la transmettre en retour une fois leur travail terminé. Dans la fonction, la valeur peut être modifiée ou utilisée pour autre chose.

Dans votre cas, the_content est un filtre et sur appel, il prend un contenu de publication et l'envoie en tant que premier argument à la première fonction accrochée. La fonction accrochée peut maintenant modifier ce contenu ou par exemple ajouter quelque chose. Mais la fonction devrait également renvoyer finalement la chaîne de contenu, de sorte qu'elle puisse être transmise à la fonction suivante accrochée au hook the_content. Ceci est répété jusqu'à ce que toutes les fonctions liées soient terminées. Ensuite, le produit final sera renvoyé au code qui a appelé le filtre (ce filtre est appelé dans the_content() , mais il peut également être appelé à d'autres endroits). et seulement alors la chaîne résultante est renvoyée. C'est pourquoi il est important de toujours renvoyer la chaîne, sinon la fonction appelante ne sait pas quoi afficher.

L'utilisation de ce filtre dans votre cas ressemblerait à ceci:

add_filter( 'the_content', 'wpse247535_display_news_slider' );
function wpse247535_display_news_slider( $content ) {
    if ( is_page( 'sample-page' ) ) {
        $content .= "plugin content";
        $content .= "more plugin content";
    }
    return $content;
}

Donc, pour répondre au titre de votre question: le contenu de votre page n'est pas écrasé, mais votre fonction ne gère pas la chaîne de contenu qu'elle obtient en tant qu'argument et ne le renvoie donc pas à la fonction d'appel, qui ne peut alors pas générer le contenu plus, comme il s'est perdu sur le chemin.

3
JHoffmann