wake-up-neo.net

warum überschreibt die Add_action ('the_content') meine Seite?

Ich bin neu in WordPress und versuche, Text auf bestimmten Seiten meiner Website anzuzeigen. Mein Problem ist, dass mein Plugin meinen aktuellen Inhalt auf dieser Seite durch den auf meinem Plugin ersetzt. Wie kann ich dafür sorgen, dass das Plugin den Inhalt der Seite nicht ersetzt.

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

Es gibt einen subtilen Unterschied zwischen Action Hooks und Filtern . Das Bemerkenswerteste ist, dass von Filterfunktionen erwartet wird, dass sie einen Wert erhalten und diesen nach Abschluss ihrer Arbeit zurückgeben. Innerhalb der Funktion kann der Wert geändert oder für etwas anderes verwendet werden.

In Ihrem Fall ist the_content ein Filter, und beim Aufruf wird der Inhalt eines Posts verwendet und als erstes Argument an die erste Hook-Funktion gesendet. Die Hook-Funktion kann nun diesen Inhalt ändern oder zum Beispiel etwas anhängen. Es wird jedoch auch erwartet, dass die Funktion die Inhaltszeichenfolge endgültig zurückgibt, sodass sie an die nächste Funktion übergeben werden kann, die mit dem Hook the_content verknüpft ist. Dies wird wiederholt, bis alle verknüpften Funktionen ausgeführt sind. Das Endprodukt wird dann an den Code zurückgegeben, der den Filter aufgerufen hat (dieser Filter wird in the_content() aufgerufen, kann aber auch an anderen Stellen aufgerufen werden). und nur dann wird die resultierende Zeichenfolge wiedergegeben. Aus diesem Grund ist es wichtig, immer den String zurückzugeben, da die aufrufende Funktion sonst nicht weiß, was sie ausgeben soll.

Die Verwendung dieses Filters in Ihrem Fall würde ungefähr so ​​aussehen:

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

Zur Beantwortung des Titels Ihrer Frage: Der Inhalt Ihrer Seite wird nicht überschrieben, aber Ihre Funktion verarbeitet die als Argument erhaltene Inhaltszeichenfolge nicht und gibt sie daher nicht an die aufrufende Funktion zurück, die sie dann nicht ausgeben kann der Inhalt nicht mehr, da er auf dem Weg verloren ging.

3
JHoffmann