Google-Adsense nach dem ersten Absatz einfügen

Ich stand gerade vor dem Problem, die Positionierung der AdSense-Ads innerhalb des Posts zu verändern. Bisher kam der AdSense-Block gleich nach dem Titel – mit durchwachsenem Erfolg.

Meine Idee: Ruft ein Besucher einen Artikel auf, so soll er nicht gleich von einem Werbeblock abgeschreckt werden, sondern zunächst den ersten Absatz des Artikels lesen können. Das führt u.a. dazu, dass der erste Eindruck der Seite nicht gleich von Werbung geprägt ist.

Aber wie füge ich einen neuen Block in alle bisherigen Posts auf themenmix.de ein? Handarbeit? Nein, danke!

Ich greife also in die Loop (schau in deinem Theme nach einer loop.php oder in die single.php; oft wird der Content da einfach mit the_content() ausgegeben ) ein, ermittle das Ende des ersten Absatzes und füge dort den Adsense-Code im Artikel ein.

Anstelle von the_content() oder ähnlichem (das ist wirklich von Theme zu Theme unterschiedlich) steht bei mir folgendes im Code:

$googleAd = '<hier steht der AdSenseCode drin, den du bei Google bekommst>';
$myContent = get_the_content_with_formatting();
$ausgabe = explode("</p>",$myContent,2);
echo $ausgabe[0]."</p>\n";
if ($noadsense <> "nein") {echo $googleAd; }
echo "\n".$ausgabe[1];

Erklärung:
Als erstes hole ich mir den Content meines aktuellen Posts in eine PHP-Variable. (Zur verwendeten Funktion get_the_content_with_formatting() folgen gleich noch ein paar Infos.) Dann splitte ich den Content am ersten </p>-Tag in zwei Teile. Dazu nutze ich die PHP-Funktion explode. Das Ergebnis ist ein Array aus zwei Elementen: das Array-Element mit dem Index 0 enthält den Content vor dem ersten </p>-Tag; das Element mit dem Index 1 den Rest vom Content.
Ich gebe mit der ersten echo-Anweisung diesen ersten Teil meines Artikels aus und hänge das abgeschnittene </p>-Tag wieder ran. Und genau jetzt kann ich meinen AdSense-Block einfügen, den ich in einer Variable $googleAd vorher gespeichert habe. Anschließend schmeisse ich den restlichen Artikelinhalt hinterher. Ganz einfach also. 😉

Würde ich den AdSense-Block z.B. nach dem 2. Absatz einfügen wollen, müsste der Code so aussehen:

$myContent = get_the_content_with_formatting();
$ausgabe = explode("</p>",$myContent,3);
echo $ausgabe[0].$ausgabe[1]."</p>\n";
if ($noadsense <> "nein") {echo $googleAd; }
echo "\n".$ausgabe[3];

Geändert hat sich der 3. Parameter bei der explode-Funktion und die Ausgabe der ersten Artikelteile.

Die Funktion get_the_content_with_formatting() habe ich bei web-template.nu gefunden. Agiere ich nämlich nur mit get_the_content(), dann habe ich bei der Ausgabe mit echo keine Formatierung im Artikeltext. Und damit auch keine Chance einen <p>-Tag zu erwischen. Außerdem sieht der Artikel dann „bescheiden“ aus: die reinste Textwüste. Von Lesefreundlichkeit keine Spur mehr.
Da ich den AdSense-Code nur auf Single-Seiten einblende und daher auch nicht auf den MORE-Teil achtgeben muss, habe ich in der Funktion die Parameter entfernt und den Code etwas modifiziert in meine functions.php eingefügt:

function get_the_content_with_formatting () {
	$content = get_the_content();
	$content = apply_filters('the_content', $content);
	$content = str_replace(']]>', ']]&gt;', $content);
	return $content;
}

Einfach copy & paste in deine functions.php. Rufst du mit dieser Funktion deinen Artikelcontent ab, dann steht er anschließend komplett formatiert in einer String-Variablen zur Verfügung und du kannst damit alles anstellen was du willst.
Ich füge halt einen Werbeblock nach dem ersten Absatz ein.

Der Teil mit der $noadsense-Abfrage im obigen Code ist eine Besonderheit, die ich mir in meinem Blog hab einfallen lassen. Ich habe dazu ein benutzerdefiniertes Feld eingefügt, über welches ich pro Artikel einstellen kann, ob da AdSense zur Anwendung kommen darf oder nicht. Ich habe nämlich Content auf themenmix.de, der recht dünn ist. Vor allem in der 80er-Datenbank kommen häufig Bands vor, die nur einen oder zwei Titel hatten (oder ich nicht mehr gefunden habe). Würde ich in diesen Artikelseiten auch noch einen AdSense-Block einbauen, käme das Verhältnis von Content zu Werbung ein wenig arg aus dem vertretbaren Gleichgewicht. Und das will ich meinen Besuchern nicht zumuten.

Vielleicht kann diese Lösung ja der eine oder andere von euch gebrauchen. 🙂

3 Antworten

  1. Holger sagt:

    Hi Jörg,
    ich hab mir jetzt einige Beitrage zur Lösung „Adsense nach Absatz X“ durchgelesen. Dein Code unterscheidet sich von den anderen, die meistens fast 1:1 von anderen Seiten übernommen wurden. Bei deinem Code besteht allergings auch das Problem, das der Adsense Code im WP Cation Div eingefügt wird, sofern man zufällig ein Bild mit Bildbeschreibung im ersten Absatz eingefügt hat.

    Ich hab deshalb hier mal meine Lösung geschrieben:
    http://www.beeze.de/2013/adsense-nach-dem-ersten-absatz-1243
    wo ich die öffnenden p Tags zum exploden nutze um das zu vermeiden. Abschließend hab ich den Code noch um ein paar Funktionen erweitert.

    Die Sache mit dem Custom Field, zur Steuerung ob Adsense ausgegeben, wird gefällt mir (Hab ein ähnliches Custom Field für den selbenzweck). Wenn es dir nur um das Content/Werbung verhältnis geht, kannst du die Ausgabe aber auch von deiner Artikellänge automatisch abhängig machen (siehe mein Code Beispiel im Link oben). 😉

    • Themenmixer sagt:

      Hi Holger,
      vielen Dank für den Hinweis und dein Codebeispiel. Ich muss mir das mal ansehen. Bei Gelegenheit. 🙂
      Viele Grüße aus Friedrichshafen
      Jörg

  2. Ingrid sagt:

    Das WP Plugin QuickAdsense ermöglicht ebenfalls die exakte Platzierung der Werbung. Ich benutze es seit mehreren Jahren.

Schreibe einen Kommentar

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