WordPress: automatisch Text an den Content von jedem Beitrag oder jeder Seite anhängen

Wordpress Hilfe

Manchmal möchte man in seinem Blog einen kurzen Hinweis unter alle Beiträge einbauen – ohne ein zusätzliches Plugin zu installieren. Bei mir gilt die Regel: Was man ohne Plugin machen kann, sollte man ohne umsetzen, denn jedes Plugin bläht WordPress wieder auf und oft haben die installierten Plugins einen deutlichen Overhead an Funktionen, die man eigentlich garnicht benötigt. Ein weiterer Punkt, der gegen immer mehr Plugins spricht, ist natürlich die Sicherheit von WordPress. Die meisten Attacken von Hacker laufen über veraltete oder unsicher-programmierte WordPress-Plugins. Der WordPress Core ist in der Regel sehr sicher, wenn man sich um die Updates kümmert.

Lösung über die functions.php

Ich habe in meinem Blog einen Zusatz unter den Artikeln einbauen wollen, der darauf hinweist, dass ich am Amazon-Partnerprogramm teilnehme. Laut Amazons neuer Regelung in 2018 muss dafür der Satz "Als Amazon-Partner verdiene ich an qualifizierten Käufen." auf jeder Seite eingerichtet werden, auf der Amazon-Werbung zu finden ist. Da ich diese ganzen Seiten nicht einzeln editieren wollte, füge ich den Hinweis einfach unter jeden Beitrag ein.

Um solche kleinen Funktionen zu ergänzen, bietet WordPress die Möglichkeit, im Ordner des Themes in der Datei "functions.php" die entsprechenden PHP-Code-Snippets einzubinden. Wenn diese Datei bei euch noch nicht existiert, legt sie am besten an und kopiert den Code unten hinein.

Der "the_content"-Hook macht’s möglich

WordPress bietet mit "Hooks" flexible Möglichkeiten, um die Funktionen, die in WordPress ablaufen zu erweitern oder zu verändern. Wir verwenden nun den the_content-Hook, um den Inhalt des Beitrags oder der Seite zu verändern, bevor er auf der Webseite ausgegeben wird. Damit der Zusatz auch nur auf Seiten und Beiträgen eingebaut wird und nicht in Kategorie-Übersichten oder ähnlichem ausgegeben wird, kommen noch die Abfragen in_the_loop() und is_main_query() zum Einsatz. Hier das fertige Script:

add_filter( 'the_content', 'filter_the_content_in_the_main_loop' );

function filter_the_content_in_the_main_loop( $content ) {
 
    // Prüfen ob wir in dem Loop eines Beitrags oder einer Seite sind
    if (( is_single() OR is_page()) && in_the_loop() && is_main_query() ) {
        // Den HTML Teil für die Schrift könnt ihr beliebig ändern oder erweitern
        return $content . '<p><font size="-0.5pt">Hinweis: Als Amazon-Partner verdiene ich an qualifizierten Käufen.</font></p>';
    }
 
    return $content;
}

Wenn man den Hinweis nur auf Beiträgen möchte und nicht auf Seiten (wie Impressum oder ähnlichem), dann ändert man die if-Anweisung wie folgt:

if ( is_single() && in_the_loop() && is_main_query() ) {

Wenn du noch Fragen zur Verwendung hast oder Vorschläge für eine Verbesserung des Codes, dann freue ich mich über deinen Kommentar.


 

16 Kommentare

  1. Frank sagt:

    Danke schön für den Beitrag – genau so etwas habe ich gesucht.
    Leider funktioniert es bei mir nicht.
    Aber ich habe auch wenig Ahnung von der Thematik.
    Vergleiche ich es mit anderen Funktionsaufrufen, dann haben die immer noch einen add_action() oder ähnliches dabei.
    Falls Du einen Tipp hast, freue ich mich über einen Hinweis.
    Danke schön! :-)
    Frank

    • Sir Apfelot sagt:

      Hi Frank! 1000 Dank für deinen Hinweis. Da fehlte in der Tat der Aufruf "add_filter()". Ohne den wird die Funktion nicht in den Hook eingebaut. Ich habe es ergänzt. Bitte probier mal, ob es jetzt mit dem neuen Code klappt! LG! Jens

  2. Sandra sagt:

    Hallo Frank,
    hab vielen lieben Dank für deinen Beitrag! Genau so etwas hatte ich gesucht :)
    Eine Frage hätte ich noch: Gibt es eine Möglichkeit, das Fokus-Keyword aus Yoast auszulesen und in den obigen Text einzufügen?
    z.B. Hinweis: Als Amazon-Partner verdiene ich an qualifizierten Käufen von [Fokuskeyword] z.B. Schaltraum).
    Liebe Grüße
    Sandra

    • Jens Kleinholz sagt:

      Hi Sandra! Ich glaube, die ganzen Variablen und auch das Focuskeyword kann man nur im Snippet einsetzen. Also in Meta-Title und Meta-Description. Mit PHP Programmierung kann man es vielleicht extrahieren und irgendwie in dem Satz ausgeben, aber ich habe keine Ahnung, wie man das macht.

  3. Norbert sagt:

    Hallo Jens,
    eine Frage zu diesem PHP Schnipsel. Wenn ich diesen Code einfüge, dann wird ein Text unter Posts angezeigt (soweit so gut), aber auch auch unter Woocommerce Produktseiten. Dort sollte dieser Text eigentlich nicht stehen. Wie muss ich denn den Code anpassen. Schon einmal vielen Dank.

    Gruß
    Norbert

    • Jens Kleinholz sagt:

      Hallo Norbert! Gute Frage, nächste Frage! :D Ich habe keinen Schimmer von WooCommerce. Ich nehme an, man müsste eine Abfrage wie "if (is_page())" oder so einbauen, allerdings mit der Erkennung, ob es eine WooCommerce Produktseite ist. Aber wie das genau geht, weiß ich leider nicht, da ich die WooCommerce Eigenheiten nicht kenne… :(

  4. Christof sagt:

    Hi,

    Ist es möglich mit ACF Pro mit einem Custom Field zu erstellen und diesen für alle Beträge automatisch anzeigen zu lassen am besten direkt unter der h1 Überschrift? Wenn ja gibt es dafür vielleicht ein Plugin ?

    • Jens Kleinholz sagt:

      Hallo Christof! Ich glaube, ACF ist für diesen Zweck nicht so gut geeignet. Die Felder sind ja immer auf den entsprechenden Post bezogen, wenn ich mich nicht täusche. Du kannst es aber vermutlich mit Ad Inserter lösen. Dort kannst ein Text anlegen und dann dem Feld sagen, wo es erscheinen soll. Es gibt auch die Option "alle Beiträge" und ich glaube, man kann auch "unter der Überschrift" oder sowas definieren…

      • Christof sagt:

        Hi Jens,

        Danke für die Antwort.

        Ich hatte halt vor das die Preise, die ich bei ACF hinzugefügt habe je nach Post auftauchen. Da es ja verschiedene Preise sind, weshalb ich ACF nutze. Kann man das vielleicht mit Ad inserter kombinieren? Es sollte halt ungefähr wie auf der Webseite Reiseuhu aussehen, sowie auch die unterschiedlichen Preise die dort unter der H1 auftauchen.

        • Jens Kleinholz sagt:

          Du kannst in Ad Inserter auch PHP-Code an einer Stelle einfügen. Wenn du es schaffst, den ACF Datenbank-Inhalt auszulesen und auszugeben, hast du das Problem gelöst. :D

  5. Christof sagt:

    Hi Jens,

    Danke es hat echt gut geklappt, weißt du vielleicht noch, wie die Preise dort die Größe und Farbe anpassen kann?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.