WP – Hinweise für das Schreiben eines WordPress-Plugins

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 17 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

WordPress gibt dem Anwender eine einfache Schnittstelle, um zusätzliche Funktionen zu implementieren, die so genannte Plugin-Funktion. Durch diese Funktion kann jede zusätzliche Funktionalität außerhalb der eigentlichen Systems, der Core-Daten, gehalten werden. Somit ist auch das durchführen eines Updates relativ leicht durchführbar.
Sinnvoll ist es grundlegend wenig Plugins zu verwenden, da durch zusätzliche Funktionen auch die Performance leidet. Allerdings ist es oft besser, für eine Anwendung ein Plugin zu hinterlegen, als beispielsweise die Originaldateien zu verändern. Dokumentiert man dies nicht immer, so ist beim nächsten Update schnell etwas zerstört. Außerdem leidet die Performance auch, wenn die Funktion direkt eingebunden ist.
Grundlegend gilt deshalb, das Plugin sollte nach bestem Wissen und Gewissen geschrieben sein. Leider ist das nicht immer leicht. Gerade weil WP so offen ist, kann jeder Anwender ein Plugin schreiben, sobald er ein wenig php-Kenntnis mitbringt. Das kann, muss aber nicht, ein Nachteil sein.
Um das Schreiben eines Plugins ein wenig zu erleichtern und mir einige Gedächtnisstützen zu hinterlegen, ist dieser Artikel entstanden.

Für jedes Plugin gelten einige Regeln, die im folgenden nur kurz aufgezählt sind, da sie auf den jeweiligen Links ausführlich beschrieben werden.

  1. Grundlegend sollen die WordPress-Coding-Standards eingehalten werden.
  2. Ein Plugin kann als einzelnes File vorliegen und eventuelle abhängige Dateien nutzen oder in einem Ordner liegen. Werden mehrere Files benötigt, oder werden bei kommenden Versionen einige Dateien nicht verändert, so bietet sich die Verwendung eines Ordners in jedem Fall an. Außerdem fördert es die Übersicht in Ordner „plugins“ aller WP-User.
    Beispiel:
    wp-content/plugins/DEIN_PLUGIN.php
    wp-content/plugins/ABHÄNGIGE_DATEI_ZU_DEINEM_PLUGIN.php
    wp-content/plugins/DEIN_PLUGIN-ORDNER/
  3. Die grundlegende Struktur sollte immer eingehalten werden. Nur so wird die Erkennung des Plugins durch WP sicher gestellt.
  4. Das Plugin sollte vom User über die Admin-Oberfläche von WP aktiviert bzw. deaktiviert werden können.
    Optimal ist ein Plugin, wenn die Anwender keine Änderungen am Code vornehmen müssen.
  5. Ebenfalls sollten mögliche Einstellungen nicht hart im Quellcode geändert werden. Hierbei ist allerdings im Vorfeld zu überlegen, wie oft muss eine derartige Konfiguration geändert werden und ist es sinnvoll die Admin-Oberfläche mit einmaligen Abfragen zu überfüllen.
  6. Eine der wichtigsten Regeln, der Namensraum sollte einmalig sein. Das ist nicht immer einfach, besonders bei der großen Anzahl an zusätzlichen Funktionen für WP.
    Vergebe am besten einen Namen, das gilt auch für die Namen aller verwendeten Funktionen, nicht nur den Pluginnamen, aus dem Namen des Plugins und der erzielten Funktion oder aus dem Autorennamen und der erzielten Funktion.
    Beispiel:
    Funktion reader(), besser ist es den Plugin-Namen mit aufzunehmen: Plugin: RSSImport –> rssi_reader(), noch eindeutiger kann es werden, wenn der Name des Autors mit eingebunden wird: Autor: Frank Bueltge –> fb_rssi_reader()
    Allerdings ist darauf zu achten, dass der Code wenigstens für den Autor noch leserlich bleibt 😉 .

    Den Namen des Plugins kann man recht gut auf den Seiten prüfen, die die WP-Plugins listen.

  7. Insofern das Plugin fertig ist und vielleicht auch von verschiedenen Usern und WP-Versionen getestet wurde, kann es veröffentlicht werden. Dazu empflehle ich folgende Seite: wp-plugins.net

Die grundlegende Struktur

Diese wenigen Zeilen sollten sich immer gleich in jedem Plugin am Anfang der Datei wieder finden. Daraus werden die Inhalte gelesen, damit WP das Plugin erkennt und über die Admin-Oberfläche verwalten kann.
Die letzten drei Zeilen sind nur relevant, wenn die User das Plugin Installer verenden, mehr Infos zum Plugin auf WP Installer Plugin für Plugins.


<?php
/*
Plugin Name: Sowieso (Plugin-Name)
Plugin URI: http://... (Link zur Pluginseite)
Description: Beschreibung (Kurzbeschreibung, xhtml möglich)
Author: Frank Bueltge (Autor[n]name[n])
Version: 1.1 (Versionsnummer)
License: GPL
Author URI: https://bueltge.de (Link zur Website des Autors)
Update Server: https://bueltge.de/.. (Link zum Update-Server, wo das Plugin liegt.)
Min WP Version: 1.5
Max WP Version: 2.0.2
*/ 

Plugin API

WordPress definiert eine eigene Schnittstelle – Plugin API. Mit Hilfe dieser API wird das Übergeben von Daten enorm erleichtert.
Grundlegend unterscheidet die WP-API nach zwei Arten von „Hooks“ – Filter-Hooks und Tätigkeits-Hooks.

  • 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.
  • 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.

Alle Filter- (Filters) und Tätigkeits-Hooks (Actions) sind auf der Plugin-API-Seite zu finden oder auf dem Blog WordPress Hooks ausführlich erklärt.

Daten in der WP-Datenbank ablegen

WordPress ermöglicht die Speicherung von Daten, ohne eine eigene Tabelle in der Datenbank anzulegen. Besonders für die Konfigurationseinstellungen eines Plugins ist dies sinnvoll. WP erlaubt dabei das schreiben, aktualisieren und Lesen der Einträge in seiner Datenbank.
Allerdings muss man nicht alle Daten in den Tabellen von WP speichern. Besonders bei großen Datenmengen leidet der „normale“ Gebrauch von WP. Es ist also im Vorfeld zu überlegen, was für Daten in welchen Mengen gespeichert werden sollen. Überlegungen dazu findet man im Artikel „Creating Tables With Plugins„.

Werden die Daten in den WP-Tabellen hinterlegt, so bietet WP folgende Möglichkeiten.

  • Daten hinzufügen –> add_option(NAME[Pflichtwert], WERT, BESCHREIBUNG, AUTOLOAD[default: yes]);
  • Daten lesen –> get_option(NAME[Pflichtwert]);
  • Daten aktualisieren –> update_option(NAME[Pflichtwert], NEUER_WERT);

Funktionen prüfen

Um Komplikationen mit nicht aktivierten Plugins oder defekten Funktionen zu vermeiden, ist es sinnvoll die verwendeten Funktionen abzufragen.
Die notwendige Abfrage habe ich im Artikel „Abfrage einer PHP-Funktion, bzw. WP-Plugins“ näher erläutert.
Diese Überlegung kann natürlich auch im Plugin angewandt werden.

Verdeutlichung an einem Beispiel

Im Artikel „WP – Plugin Tipp – Dashboard erweitern“ erläutere ich ein wenig mehr an Hand eines Beispiels bzw. direkt am Code.

Weiterführende Links:

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

17 Kommentare

  1. Hallo!

    hab mir deine tollen WP-Plugin Tutorials durchgelesen. Hab leider selbst kaum Ahnung von PHP…Meinst du man könnte hieraus: http://www.qunst.org/screenshot/downloads.php.zip ein Plugin für WordPress schreiben? Ich hab mir das mal vor langer Zeit zusammengebastelt und es kommt hier zur Anwendung: http://www.qunst.net/index.php?cmd=downloads .
    Jetzt würde ich die Seite aber gerne mit WordPress managen. Vielleicht hast du nen Tipp für mich, wie ich Anfangen kann…
    Danke,
    Claude

  2. Hallo cloude,
    Um die wechselnden Seiten darzustellen und die nötigen Downloads anzupassen benötigst du eigentlich kein Plugin. Dieses Design und Aufgabe, wie due es auf deiner Downloadsite hast, is tschon jetzt mit WP machbar.
    Warum möchtest du unbedingt ein Plugin?
    LG Frank

  3. Hi Frank!

    ich möchte garnicht unbedingt ein Plugin…hab aber nach Download-Plugins gesucht und die schienen mir nicht unbedingt alles leisten zu können, was ich brauch….besonders, dass man die Downloads nur nach ‚Artist‘ sortiert anschauen kann. Fällt dir ein Plugin ein, dass dafür geeignet wäre?
    Danke und viele Grüße!
    Claude

  4. Hallo!

    hab leider nichts gefunden. Kann aber auch an meinem schlechten Englisch liegen..
    Danke aber!
    claude

Kommentare sind geschlossen.