WordPress & Webwork

WordPress: AdSense & Co. nur in älteren und langen Artikeln

Google AdSense Das es unter Umständen sinnvoll sein kann, die Werbung von Stammlesern zu "verstecken" – also in älteren Artikeln und/oder für Suchmaschinen-Besucher anzuzeigen – habe ich bereits in mehreren Artikeln erwähnt (hier, hier und hier). Dabei habe ich als Lösungsansatz immer das WordPress-Plugin Who See Ads erwähnt, da man damit Abfragen generieren kann: Bin ich ein alter Artikel?, Komme ich von einer Suchmaschine? etc.

Was aber das Plugin nicht kann, ist die Prüfung der Artikellänge. Ich persönlich denke, es ist nicht nicht nur sinnvoll bestimmte Werbeblöcke, wie zum Beispiel AdSense, nur in älteren Artikeln einzubinden, diese Artikel sollten auch eine gewisse Länge aufweisen, damit die Werbung in einem sinnvollen Verhältnis zum Inhalt (Artikel und Kommentare) steht.

Folgendermaßen könnte man so etwas erreichen. Den folgenden Code…

// Wörter zählen für Werbeblock
function woerter_zaehlen(){
ob_start();
the_content();
$inhalt = ob_get_clean();
return sizeof(explode(" ", $inhalt));
}

// Alter Artikel
function alter_artikel($post_id=null){
   $tage = 10;
   global $wp_query;
   if(is_single()) {
      if(!$post_id) {
         $post_id = $wp_query->post->ID;
      }
      $aktuelle_zeit = time();
      $zeitabstand = $tage *86400;
      $post_id = get_post($post_id);
      $artikel_datum = mysql2date('U',$post_id->post_date);
      $pruefung = $artikel_datum + $zeitabstand;
      $test = $aktuelle_zeit - $pruefung;
      if($test > 0){
         $return = true;
      }else{
         $return = false;
      }
   }else{
      $return = false;
   }
   return $return;
}

… in die functions.php einbinden. Anschließend die single.php öffnen – diese Template-Datei ist zuständig für die Ausgabe der einzelnen Artikel – und dort an der gewünschten Stelle, zum Beispiel vor oder nach dem Artikel, folgendes einbinden:

<?php if(alter_artikel() and woerter_zaehlen()> 300){ ?>
Bannercode...
<?php } ?>

Damit erreichst du, dass die Werbeblöcke nur in Artikeln erscheinen die älter als 10 Tage sind und die mindestens 300 Wörter lang sind. Selbstverständlich kannst du die Angaben zum zeitlichen Abstand und für die benötigte Artikellänge an deine Bedürfnisse anpassen.

Gefunden habe ich die beiden Code-Fragmente auf www.wprecipes.com (hier und hier). Ob das allerdings die originale Quelle ist, kann ich nicht sagen, da einige Blogs im englischsprachigen Raum gerne mal vergessen den originalen Verfasser zu erwähnen.

Nachtrag: Thomas Scholz hat mich auf Google+ angesprochen und darauf hingewiesen, dass man das ganze auch etwas effektiver umsetzen kann.

Daher habe ich jetzt auf den zweiten Code-Block in der functions.php, der das Alter des Artikels bestimmt, verzichtet und momentan schaut die Abfrage in der single.php so aus:

<?php if(woerter_zaehlen()> 300 and (time() - (10 * 86400) > get_the_date('U'))) { ?>
Bannercode...
<?php } ?>

7 Reaktion(en)

  1. Daniel

    Sollte die Werbung nicht einfach so eingebunden sein, dass sich sowohl der Stammleser als auch der "Neuling" nicht unwohl fühlt. Ich will ja schließlich möglichst viel Google Traffic zu Stammlesern machen.

    1. Vladimir

      @Daniel,

      ich habe auch nirgendwo geschrieben, dass du du die Suchmaschinenbesucher mit übermäßigen Werbung traktieren sollst. Es gehtviel mehr darum das es Werbeformen gibt, die eher für Stammleser geeignet sind (z. B. Buchrezensionen) und andere wie AdSense eignen sich eher für Suchmaschinenbesucher.

  2. Kriesi

    Nette Idee :) Die Wörter Zählen Funktion kann man allerdings auch noch gut abkürzen:

    function woerter_zaehlen(){
    return str_word_count(get_the_content());
    }

  3. Kriesi

    Hm interessant, wusste ich ned :)

    Allerdings würds ichs bei einer funktion wie hier wohl trotzdem einsetzten da es nicht wirklich relevant ist ob das ding am ende 3 wörter daneben liegt ;D

    Das tuts natürlich auch:

    function woerter_zaehlen(){
    return sizeof( explode( " ", get_the_content() ) );
    }

Die Kommentare in diesem Beitrag sind geschlossen.