WP – Tutorial, wir schreiben ein simples WP-Plugin – Teil 0

Im nächsten Teil dieser Serie, so hoffe ich, wird es darum gehen, ein Plugin zu schreiben, welches etwas komplexer ist und die verschiedenen Punkte und Zugriffsmöglichkeiten von WP nutzt. Um dieses besser zu verstehen, möchte ich ein kleines „hello world“-Plugin mit euch schreiben. Es sind also alle eingeladen, die sich bisher noch nicht mit dieser Schnittstelle von WP befasst haben. Ich hoffe auch wieder, dass alles verständlich erläutert ist und zum Nachahmen anregt, denn WordPress macht Spass und ist mit dieser Schnittstelle flexibel.

Im nächsten Teil dieser Serie, so hoffe ich, wird es darum gehen, ein Plugin zu schreiben, welches etwas komplexer ist und die verschiedenen Punkte und Zugriffsmöglichkeiten von WP nutzt. Um dieses besser zu verstehen, möchte ich ein kleines „hello world“-Plugin mit euch schreiben.

Es sind also alle eingeladen, die sich bisher noch nicht mit dieser Schnittstelle von WP befasst haben. Ich hoffe auch wieder, dass alles verständlich erläutert ist und zum Nachahmen anregt, denn WordPress macht Spass und ist mit dieser Schnittstelle flexibel.

Was brauchen wir?

  1. Zu ersteinmal einen laufenden WP-Blog, dazu reicht ein lokal laufender, schnell mit XAMPP und WP eingerichtet. Dadurch kann man spielen ohne zu zerstören. Ein Tutorial dazu beschreibt der Artikel: „WordPress unter XAMPP installieren“
  2. Außerdem ist ein Editor, der php beherrscht recht nützlich. Prinzipiell reicht aber auch Notepad. Als Editor nutze ich UltraEdit, da der aber kostenpflichtig ist empfehle ich PHP Designer 2006, der kann sogar debuggen.
  3. Ebenso sind Kenntnisse der Sprache php nützlich, wobei ich alles mir Basisanweisungen schreibe, so dass man es recht leicht versteht.

Basiswissen

Zuerst müssen wir verstehen, dass WP die include()-Anweisung verwendet, um ein Plugin zu nutzen. Dadurch wird das Plugin im Kern von WP nutzbar, man kann also die Funktion(en) des Plugins in all seiner Größe nutzen, also auch die Variablen, Methoden, Konstanten, Werte etc. .

Aber Achtung, diese bedeutet auch, dass wenn ein Plugin nicht richtig läuft oder deaktiviert wird, es zu Problemen auf dem Blog kommt. Deshalb sollte man auch Funktionen, die über Plugins bereit gestellt werden, mit Hilfe einer if-Abfrage integrieren (mehr dazu: „Abfrage einer PHP-Funktion, bzw. WP-Plugins“).

WP-Plugins sind PHP-Scripte mit allen erforderlichen Daten. Wollt ihr nun eure Inhalte aus dem Plugin an WP übergeben, so müssen alle Informationen in der bestehenden Funktion integriert sein!

Tipp:

Im Artikel „WP - Hinweise für das Schreiben eines WordPress-Plugins“ gibt es einige grundlegende Hinweise.

Fangen wir nun aber an - Grundlegende Vereinbarungen

Alle WP-Plugins müssen in der Datei einige Kommentare enthalten, damit das Plugin erkannt wird und im backend, dem Admin-Panel erreichbar ist. Auch hier der Hinweis, die letzten drei Angaben sind nur für das Plugin „Installer“ erforderlich.


<?php
/*
Plugin Name: hello world
Plugin URI: https://bueltge.de/
Description: hello world - wir schreiben ein einfaches WP-Plugin
Version: 1.0
Author: Frank Bueltge
Author URI: https://bueltge.de/
Update Server: https://bueltge.de/wp-content/download/wp/
Min WP Version: 1.5
Max WP Version: 2.0.4
*/
?>

Der Code oben ist prinzipiell ein ganz normaler Kommentarbereich in php. Der Kommentarblock kann mehr enthalten, aber diese Schlüsselbegriffe, getrennt vom Inhalt nach dem Doppelpunkt, sind entscheidend für WP.

Erstellt also nun eine Datei hello_world.php mit dem obigen Inhalt. Die Datei in euren Plugin-Ordner (/wp-content/plugins/) kopieren und dann in den Admin-Bereich von WP wechseln. Hier sollte nun euer Plugin in der Liste zu finden sein.
Screenshot WP-Admin Plugin

Natürlich kann das Plugin auch in einen Unterordner gelegt werden, dies bietet sich zum Beispiel an, wenn für ein Plugin mehrere Dateien benötigt werden. Auch hierzu mehr im Artikel: „WP - Hinweise für das Schreiben eines WordPress-Plugins“.

Hooks

Grundlegend unterscheidet die WP-API nach zwei Arten von „Hooks“ - Filter-Hooks und Tätigkeits-Hooks.

  • add_filter() - Filter-Hooks ermöglichen das Hinzufügen und das Entfernen der Filter-Funktionen, die nach spezifizierten Daten fungieren (normalerweise Text). Diese ermöglicht Plugins, Inhalt oder Text schnell zu ändern.
  • add_action() - Tätigkeits-Hooks ermöglichen das Hinzufügen und das Entfernen von Funktionen, deren Durchführung durch eine Core-Datei von WordPress ausgelöst wird. Dieses ermöglich es Plugins, Funktionen jeder Zeit durchzuführen.

Um dies besser zu verstehen, bauen wir einen Filter-Hook in unser Plugin.


add_filter('the_content', 'hello_world');

function hello_world($content) {

}

Wenn du nun dieses Plugin aktiviert hast und deine Seite besuchst, werden alle Beiträge ohne Inhalt angezeigt. Ein nicht sehr sinnvolles Plugin, aber es demonstriert die Fähigkeiten von dem add_filter-Hook auf den Bereich content.

Bauen wir den code noch ein wenig aus, dann erläutere ich die wenigen Zeilen.


add_filter('the_content', 'hello_world');

function hello_world($content) {
	return strtolower($content);
}

Auch diese Funktion sorgt nicht für bahnbrechende Errungenschaften auf unserem Blog, aber sie zeigt nun anschaulich, was durch unseren Filter passiert - alle Zeichen werden klein geschrieben ausgegeben. Dafür sorgt die php-Funktion strtolower.

Der erste Parameter des Filters add_filter() ist der Name des Filters. Der Name beschreibt, welche Daten du filtern möchtest - im unserem Beispiel the_content, was den Inhalt deines Blogs definiert.
Im zweiten Parameter wird der Name der zu verwendeten Funktion festgelegt - in unserem Fall: hello_world, die in den folgenden Zeilen erscheint.

Wenn nun die Seite besucht wird, dann wird durch WP der Inhalt - the_content - durch diese Funktion - hello_world - neu erstellt. Der Inhalt läuft quasi durch die Funktion. Durch die return-Anweisung wird der Inhalt zurück gegeben, in dem Fall alles klein, da die php-Funktion strtolower angewandt wird. Im ersten Beispiel war die Seite ohne Inhalt, da unsere Funktion keinen Inhalt zurück gegeben hat.

Noch mehr Hooks

WordPress bietet eine Reihe von Filtern an und jeder hat unterschiedliche Eigenschaften. Alle Möglichkeiten sind im codex von WP zu finden. Als Hilfsmittel habe ich aber einen kleinen Cheat Sheet erstellt, den ihr als pdf downloaden könnt.

Der add_action-Hook verhält sich ähnlich wie der add_filter()-Hook, aber er filtert nicht einen bestimmten Bereich, sondern erweitert WP um Funktion(en). Auch hier ein Beispiel:


add_action('wp_head', 'hello_world');

function hello_world() {
	echo "<script type=\"text/javascript\" >alert(\"hello world\");</script>\n";
}

Wenn ihr nun euren Blog besucht, bekommt ihr ein kleines Popup mit dem Text „hello world“ - nichts tolles, aber auch hier erklärt sich die Funktion des Hooks. Der Hook erweitert den Headbereich (wp_head) mit der Funktion hello_world. Diese Funktion sorgt dann mit Hilfe von Javascript für das Popup. Schaut euch den Quellcode des Blogs an, dort findet ihr im Head-Bereich unsere Anweisung.


<script type="text/javascript" >alert("hello world");</script>

Auch hier ist der erste Parameter für den Hook-Namen - wp_head - zuständig und der zweite Parameter - hello_world - für die zu nutzende Funktion. Auch hier gibt es einige add_action()-Hooks und auch diese findet ihr in der Plugin-API und auf dem Cheat Sheet.

Funktionen vereinigen

Nun will man nicht nur eine Funktion in einem Plugin einsetzen, oft benötigt man viele kleine Funktionen um einen Featurewunsch zu erfüllen.

Bauen wir uns also nun ein Plugin, welches mehrer Funktionen besitzt. Mit den obigen beiden Beispielen können wir schon eine ganze Menge „Unfug“ in unserem Blog anstellen. Dabei ist es wichtig, dass die Namenskonventionen eingehalten werden, als keinen Namen doppelt.


<?php
/*
Plugin Name: hello world
Plugin URI: https://bueltge.de/
Description: hello world - wir schreiben ein einfaches WP-Plugin
Version: 1.0
Author: Frank Bueltge
Author URI: https://bueltge.de/
Update Server: https://bueltge.de/wp-content/download/wp/
Min WP Version: 1.5
Max WP Version: 2.0.4
*/

function hello_world_head() {
	echo "<script type=\"text/javascript\">alert(\"hello world\");</script>\n";
}

function hello_world_content($content) {
	return strtolower($content);
}

function hello_world_title($title) {
	$title = str_replace(' ', 'Unser erstes Plugin', $title);
	return $title;
}

add_action('wp_head', 'hello_world_head');
add_filter('the_content', 'hello_world_content');
add_filter('the_title', 'hello_world_title');
?>

Nun haben wir ein Plugin, was drei verschiedene Bereiche in unserem Blog verändert.

  1. Der erste Hook - add_action - nutzt die Funktion - hello_world_head - und schreibt in den Header unserer Seite die Anweisung, um ein kleines Popup aufzurufen.
  2. Der zweite Hook ist ein Filter - add_filter - und bedient den Bereich content, dabei werden mit Hilfe der Funktion - hello_world_content - die Inhalte in Kleinbuchstaben geändert.
  3. Und nun der dritte Hook, auch ein Filter - add_filter - , der den Bereich - the_title - bedient. Der Title wird verändert, und zwar so, dass jedes Leerzeichen den Inhalt „Unser erstes Plugin“ bekommt.

Zusatzinfos für Hooks

Den Hooks add_filter und add_action kann zusätzlich ncoh ein Wert zwischen 1 und 10 mit gegeben werden. Dieses wert legt die Priorität des Filters fest. Wird kein wert übergeben, so ist 10 definiert.

Zugriff auf die WP-Datenbank

Wenn man nun noch zusätzlich Daten mit Hilfe der Datenbank einbauen möchte, so muss man die $wpdb einbinden, damit steht einem alles zur Verfügung. Der Namen generiert sich aus dem Präfix, der in der wp-config.php abgelegt wird - $table_prefix. Als vierten Wert können seit WP 1.5* Argumente übergeben werden. Einige Hooks können mehrer Argumente benötigen, Standard ist 1.

Beispiel:


add_action ('Hook_Name', 'Funktion_Name', [Priorität], [Argumente]);

add_action('wp_head', 'hello_world_head', 1);

Fazit

Ein tolles Plugin - oder ? Sicher nicht gerade die gesuchte Funktion, aber es erklärt die Mächtigkeit, die von Plugins in WordPress ausgehen kann. Deutlich ist, so hoffe ich, dass relativ leicht ist, Funktionen und neue Features an WP zu übergeben. Genauso wichtig ist es aber, Plugins zu testen und sich Gedanken über die Übergabe der Funktionen zu machen. Achtet darauf, dass ihr immer einen eindeutigen Namen für eurer Funktionen benutzt, denn es gibt hunderte Plugins und noch mal so viele Funktionen, Variablen, etc . Auch hier nochmal der Hinweis auf die Codingstandards die ihr im Artikel „WP - Hinweise für das Schreiben eines WordPress-Plugins“ nachlesen könnt.

Download:




Spendenbutton

Ist die Arbeit nicht 1 Euro wert?
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.
Möchtest du mehr oder anders spenden, so besuche meine Wunschliste.

Download als phps-Datei: hello_world.phps - 781 Byte

46 Comments

  1. Danke für den Beitrag, das hilft schon mal für den Anfang. Ich benutze übrigens zu programmieren das Aptana Studio. Gibt es auch kostenlos und läuft um einiges stabiler als der PHP Designer.

  2. Servus,

    ich habe nun alles durchgelesen, also Teil 0 bis 3 und auch das Theme Tutorial - Danke dafür! Mit den Plugins klappt es noch nicht!

    Der obige Beitrag ist für mich unverständlich und zwar bekomme ich nicht raus, wo die notwendige Infos zum Verhalten der Hooks und der Parameter oder Variablen stehen.

    In meinem Fall will ich aus den letzten 5 Beiträgen einen Newsletter per Mail verschicken.
    Die php Funktion mail kann das ja recht leicht. Da formuliere ich meine Variable "$empfaenger" in der Funktion "emailletter" - aber was soll ich machen, wenn ich nicht weiß was mein Verdachtshaken macht und wo die ursprüngliche Funktion steht auf die sich der Haken bezieht.

    Danke vorab, wenn du da einen Link hast, ich such schon lange, werde aber nicht schlau.

    Konkrete Frage - woher weiß ich, was der Parameter $post_id macht? Woher weiß ich dass ich auf den hook the_content zugreifen muss?

    Beispiel:

  3. Das bekommt man nur durch suchen raus, oder man durchwühlt einschlägige Seiten.
    Ich suche in der Regel dort, wo ich etwas hinsetzen will. Dann schaue ich mir die Dateien von WP an.
    Es gibt aber einige Seiten, die Hooks listen, zum Beispiel die WP-API und WP Hooks.

  4. Danke, ich habe nun schon einen weiteren Verdacht, ich hatte auch einen Fehler was die php-Schreibweise betraf, so muss ich ein Dollarzeichen bei der Funktionsdefinition setzen, das wusste ich nicht. Mal schauen, wann ich mein erstes Plugin rausklatsche.

    Hilfreich fand ich diese Seite, da sind wohl immer die aktuellen WordPress-Dateien zum durchstöbern online und es gibt auch gleich Suchfunktionen und Verlinkungen der einzelnen Funktionen: http://wordpress.taragana.net/nav.html?wp-admin/admin-functions.php.source.html#l288

Comments are closed.