Mein erstes WordPress-Plugin
// May 21st, 2008 // Blog / Website, IT, Tutorials
naja, zumindest mehr oder weniger.
Anlass war, dass ich bei einigen Beiträgen nur mal ein Bild posten wollte, dabei aber der AdSense-Block im Weg war. Da ich diesen Block aber, genau wie den Banner unter den Beiträgen, direkt im Template eingebunden habe, kann ich ihn nicht einfach für einzelne Artikel deaktivieren.
Nachdem ich kein Plugin finden konnte, welches mir nur diese Funktionalität bietet, habe ich überlegt, wie ich dies selbst realisieren könnte. Dabei würde es ja reichen, wenn auf eine Variable zugegriffen werden könnte, die bei der Erstellung des Artikels angegeben wird. Mit dieser Variable könnte festgelegt werden, ob und welche Werbung angezeigt wird.
Diese Variable kann über die 'Benutzerdefinierten Felder' beim Schreiben eines Artikels angegeben werden. Den Schlüssel habe ich 'disableadvertise' genannt. Nach dem Anlegen steht dieser Schlüssel in allen Einträgen zur Verfügung, ist jedoch so lange ohne Inhalt, bis wir ihm einen zuweisen.
Da ich in der single.php nur zwei Werbeblöcke eingebunden habe, werden beide Blöcke angezeigt, wenn dem Schlüssel 'disableadvertise' kein Wert zugewiesen ist. Bei irgendeinem Wert (Variable != '') wird die erste AdSense-Anzeige (der kleine Block oben) und bei einem Wert >1 der untere Block ausgeblendet. Ist der Wert also z.B. 2, sind beide Anzeigen nicht sichtbar.
Um das ganze zu realisieren, habe ich im Plugin-Verzeichnis von WordPress eine php-Datei mit dem folgenden Inhalt erstellt. Dabei habe ich mich sehr stark an dem Beispiel von Frank Bueltge orientiert, welches er nutzt, um die EXIF-Daten seiner Bilder auszulesen.
/*
Plugin Name: AdDisable
Plugin URI: http://www.feldstudie.net
Description: Benutzerdefiniertes Feld auslesen um Werbung zu deaktivieren
Version: 1.0
Author: Torsten Feld
Author URI: http://www.feldstudie.net
*/
// Meta-Key: disableadvertise
function disableadvertise() {
global $id, $post_meta_cache;
if ( $keys = get_post_custom_keys() ) {
foreach ( $keys as $key ) {
$values = array_map('trim', get_post_custom_values($key));
$value = implode($values,', ');
if ( $key == 'disableadvertise' ) {
return $value;
}
}
}
}Um den Inhalt des Schlüssels verwenden zu können, muss der Rückgabewert der oben gezeigten Funktion einer Variable zugewiesen werden. Dies mache ich erst direkt in der single.php mit dem hier gezeigten Code:
Dabei wird überprüft, ob die Variable einen Wert beinhaltet. Ist dies der Fall, wird der Werbeblock ausgeblendet.
Bei der zweiten AdSense-Anzeige wird überprüft, ob der in der Variable gespeicherte Wert kleiner 2 ist. Ist dies der Fall, wird der Block gezeigt, ansonsten wird die Anzeige ausgeblendet.
Ich hoffe, ich konnte jemandem damit helfen. Ich werde mich bemühen, das Plugin zu erweitern und eine kleine Benutzeroberfläche im Adminmenü zu basteln. Sofern mir das gelingt, werde ich das Plugin veröffentlichen. Bis dahin kann dieser Code hier frei genutzt werden. Über einen Backlink würden Frank und ich uns natürlich freuen. ![]()
Links



Genau das war mein Anspruch, als ich das Tutorial erstellte. Man kann sich in WP recht schnell und mit Spass am Lernen Lösungen erstellen, die genau das tun, was man benötigt. Damit musst du nicht irgendein umfangreiches Plugin nutzen und dir unmengen Daten in das System holen, die man nicht benötigt.
Das nächste, was jetzt noch ansteht, wäre eine Konfiguration über das Admin-Interface. Aber da muss ich mich wohl doch noch ein ganzes Stück mehr einarbeiten.
Btw: Codesnippet hat nach erneutem Herunterladen von WordPress.com doch funktioniert. Zeilenumbruch und größerer Text wären nicht schlecht, aber das bekomme ich auch noch hin. Bin aber trotzdem für weitere Hilfe dankbar.
Zeilenumbruch wird automatisch erzeugt, aber du solltest per CSS die Schriftgröße definieren und den Container auf overflow: auto setzen, dann entsteht ein Scrollbalken.
Text Control muss den Post auf "ohne Formatierung" setzen, sonst sind Hochkommas etc. falsch.
Habe Text Control gerade geupdatet, zu finden unter http://bueltge.de/wp-content/download/wp/text-control.zip
So, CSS stimmt jetzt soweit. Jetzt muss ich nur noch eine Möglichkeit finden, die Zeileneinschübe / Tabs kleiner zu bekommen. Ein paar Leerzeichen weniger täten es ja auch.
Hmm... Das Textcontrol macht aber scheinbar auch noch nicht das, was es soll. Einfach die beiden Felder für Posts auf "No Formatting" bzw. "Keine Charakter-Formatierung" stellen und das war's?
ja, einfach einstellen. In den Einstellungen kann man das dauerhaft festlegen, dort habe ich immer Post/Excerpt und Kommentare immer auf Ohne Charakter Formatierung, der Rest ist default.
Plugin hat bisher noch nie Probleme gemacht.
Nach den Einstellungen natürlich speichern. Auch wenn man das nur im Post ändert, speichern ist pflicht.
Ah, jetzt hab ich es gerafft. Hatte ganz übersehen, dass man das dann nochmal im Beitrag selbst auswählen kann / muss.
Habe jetzt aber in der ersten Dropdown-Box 'Default (wpautop)' gewählt, da es mir sonst die Zeilen irgendwie auseinander gehauen hat. Der zweite Wert ist, wie von Dir empfohlen, auf 'Keine Charakter-Formatierung'.
Jetzt ist's so, wie ich es mir vorgestellt habe.
Danke Dir, Frank.
Die erste Box ist am besten auf Default zu setzten, nur falls Wp mal den Filter ändert. Ansonsten musst du auch die br und p im Editor setzen, die werden jetzt von WP gebracht.
Gern geschehen.
Hmm... also im FireFox sieht es ja genau so aus, wie ich es haben will. Im IE hingegen werden keine Zeilenumbrüche eingefügt. D.h. der Code wird nur als ein 'Batzen' an Text ausgegeben.
Jemand ne Idee, wie ich das ändern kann?
Nachtrag 1242 Uhr
Die < pre >< /pre > Elemente haben das im IE verursacht. Nachdem ich sie aus dem Artikelcode entfernt habe, wird nun auch im IE alles korrekt angezeigt.