Nicht nur beim Code, sondern auch bei der Dokumentation gibt WordPress im Handbuch einige Regeln vor. Plugin-Entwicklern wird nahegelegt, sich daran zu halten, da auf diese Weise nicht nur einem selbst, sondern auch anderen Programmierern geholfen wird, sich schnell zurecht zu finden.
Im Grunde orientiert sich das WordPress Dokumentations-Schema direkt an dem von PHPDoc (http://www.phpdoc.org). Während das Core Contributor Handbuch von WordPress jedoch nur Ergänzungen oder Abänderungen bespricht, findet man bei Github weitere Empfehlungen und Vorschläge zur Dokumentation der eigenen PHP-Scripte: https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc.md.
Tipps zur Dokumentation
- Es sollte zu jeder Zeit klar sein, was eine Funktion macht, wann sie ausgeführt wird und warum. Dies gilt natürlich auch für WordPress Actions sowie Filter, die wir später besprechen werden.
- Weiter wird empfohlen, das
@since
-Tag zu benutzen. Es gibt an, ab welcher Version eine Klasse, eine Funktion oder eine Datei im eigenen Plugin existiert. Das hilft übrigens später ungemein, wenn Sie für Ihre eigenen Plugins Support leisten müssen. - Benutzen Sie das Minuszeichen (-) um Aufzählungen zu generieren.
- Wenn Sie Codebeispiele angeben möchten, rücken Sie jede Code-Zeile mit jeweils 4 Leerzeichen ein. Vor und nach dem Code-Block muss sich eine Leerzeile befinden.
Funktionen und Methoden
Der Dokumentationsblock von Funktionen und Klassen sollte wie folgt aussehen:
- Zusammenfassung
Ein Einzeiler der beschreibt, was die Funktion/Klasse tut. Der Satz muss mit einem Punkt enden und darf keine HTML-Codes enthalten. - Beschreibung
Eine ausführliche Beschreibung der Funktion, Methode, Klasse. Endet ebenfalls mit einem Punkt und darf – außerhalb von Codebeispielen – keine HTML-Tags enthalten. - @since
Gibt die Versionsnummer mit einer optionalen Beschreibung an. Sie sollte dreistellig sein. Mehrere @since-Blöcke sollte es geben, sobald signifikante Änderungen durchgeführt wurden. - @access
Soll nur bei Methoden in Klassen benutzt werden. Und auch nur dann, wenn die Methode alsprivate
markiert ist. - @see
Beschreibt eine Funktion, eine Methode oder eine Klasse, auf die aufgebaut oder verweisen wird. Alternativ kann hier auch eine URL eingegeben oder auf einen Cook verweisen werden ({@see 'save_post}
. - @deprecated
Bedeutet “veraltet” und wird nur angegeben, wenn die Klasse, die Funktion oder die Methode nicht mehr verwendet werden soll. Dahinter wird die dreistellige Versionsnummer angegeben, ab welcher Version sie als veraltet markiert wurde. Zum Schluss ist noch eine kurze Beschreibung sinnvoll, die angibt, welche Funktion stattdessen Verwendung finden soll. - @link
Wurde früher für das Setzen von Links benutzt. Dies ist in PHPDoc jedoch mittlerweile veraltet. Man sollte stattdessen das@see
verwenden, welches ebenfalls auf URLs verweisen kann. - @global
Listet alle globalen Variablen auf, die innerhalb der Funktion bzw. der Methode zur Anwendung kommen.
Code-Schnipsel:
<?php
/**
* Zusammenfassung
*
* Beschreibung.
*
* @since x.x.x
* @since x.x.x Änderung Y.
* @deprecated x.x.x Benutze stattdessen neuer_funktionsname().
* @access (für Methoden nur wenn als privat markiert)
*
* @see Function/method/class relied on
* @global Typ $var Kurzbeschreibung.
*
* @param Typ $var Beschreibung.
* @param Typ $var Optional. Beschreibung.
*
* @return Typ Beschreibung.
*/
?>
Beispiel
<?php
/**
* Lässt das Fahrzeug fahren.
*
* Legt den ersten Gang des Fahrzeugs ein und beschleunigt.
*
* @since 1.0.3
*
* @see Fahrzeug::fahren()
*
* @param object $fahrzeug Eine Klasse des Typs Fahrzeug.
* @param int $gang Optional. Der Gang der eingelegt werden soll.
*
* @return float Geschwindigkeit
*/
function fahren( $fahrzeug, $gang = 1 ) {
$fahrzeug->gang_einlegen( $gang );
return $fahrzeug->geschwindigkeit();
}
?>
Klassen
Klassen-Eigenschaften sollten wie folgt deklariert werden:
- Zusammenfassung
Der Satz sollte mit einem Punkt enden. - @since
Gibt die Versionsnummer mit einer optionalen Beschreibung an. Sie sollte dreistellig sein. - @access
Gibt an, ob eine Eigenschaft als private, protected oder public markiert wurde. - @var
Wie@param
.
Code-Schnippsel:
<?php
/**
* Zusammenfassung.
*
* @since x.x.x
* @access (private, protected, or public)
* @var Typ $var Beschreibung.
*
*/
?>
Beispiel:
<?php
class Meine_Klasse {
/**
* Prüft ob Motor gerade läuft.
*
* @since 1.0.0
* @access private
* @var bool $running
*/
private $running = false;
}
?>
Einbinden von Dateien
Dateien, die mit include
oder require
eingebunden werden, sollten durch eine kleine Kurzbeschreibung ergänzt werden.
<?php
/**
* Kurzbeschreibung.
*/
require_once( ABSPATH . '/dateiname.php' );
?>
Hooks (Actions & Filter)
Wenn Sie eigene Filter (apply_filters
) oder Actions (do_action
) in Ihrem Plugin nutzen, so sollten diese dort kommentiert werden, wo sie Anwendung finden.
- Zusammenfassung
Sollte mit einem Punkt enden. - Beschreibung
Falls nötig eine ausführliche Beschreibung der Aktion oder des Filters. Endet ebenfalls mit einem Punkt. - @since
Gibt die Versionsnummer mit einer optionalen Beschreibung an. Sie sollte dreistellig sein. - @param
Wenn eines der Parameter ein Array übergibt, sollte dieses mittels der PHPDoc Hash-Annotation beschrieben werden. - @ignore
Gibt an, ob ein Hook nur für interne Zwecke Verwendung finden sollte.
Achtung: @return
wird nur bei Filtern angegeben. Sie geben immer den ersten Eingangsparameter zurück. Actions haben keinen Rückgabewert.
<?php
/**
* Zusammenfassung.
*
* Beschreibung.
*
* @since x.x.x
*
* @param array $args {
* Kurzbeschreibung
* @type type $var Description.
* @type type $var Description.
* }
* @param Typ $var Beschreibung.
*/
do_action( 'mm_tue_etwas', $array, $boolean );
?>
Filter und Actions werden in der Regel öfter als nur einmal angewendet. Ist das der Fall, muss nicht immer der komplette PHPDoc-Block wiederholt werden. Stattdessen ist es besser, den kompletten Block nur beim ersten Vorkommen zu dokumentieren und dann darauf zu verweisen.
<?php
/** Diese Aktion wurde in Pfad/zur/dateiname.php bereits dokumentiert. */
do_action( 'mm_tue_etwas', $array, $boolean );
?>
Kommentare
Kommentare, die direkt im PHP Code angegeben werden, sollten wie folgt dokumentiert werden.
<?php
// Einzeiliger Kommentar.
/**
* Dieser Kommentar ist lang genug, dass
* er sich über mehrere Zeilen erstreckt.
*/
?>
Dokumentation von Dateien
Im Kopfbereich einer Datei sollte die Dokumentation wie folgt aussehen:
- Zusammenfassung
Sollte mit einem Punkt enden und zusammenfassen, welchen Zweck die aktuell vorliegende Datei erfüllt. - Beschreibung
Falls nötig eine ausführliche Beschreibung der Datei. Endet ebenfalls mit einem Punkt. - @since
Gibt die Versionsnummer mit einer optionalen Beschreibung an. Sie sollte dreistellig sein. - @see
Beschreibt eine Funktion, eine Methode oder eine Klasse, auf die aufgebaut wird. Alternativ kann hier auch eine URL eingegeben werden. - @package
Ein sogenanntes Package kann dazu verwendet werden, verwandte Elemente zu gruppieren. - @subpackageWerden dazu benutzt, Elemente in Untergruppen einzuteilen. Oft werden hier auch die PHP Namespaces angegeben.
<?php
/**
* Zusammenfassung.
*
* Beschreibung.
*
* @since x.x.x
* @see URL
*
* @package WordPress
* @subpackage Komponent
*/
?>
Konstanten
- Zusammenfassung
Sollte mit einem Punkt enden. - @since
Gibt die Versionsnummer mit einer optionalen Beschreibung an. Sie sollte dreistellig sein. - @var
Angabe von Typ und Beschreibung.
<?php
/**
* Kurzbeschreibung.
*
* @since x.x.x
* @access (private, protected, or public)
* @var Typ $var Beschreibung.
*
*/
?>
Beispiel:
<?php
class Meine_Klasse {
/**
* Wert für den Start.
*
* @since 1.0.0
* @access public
* @var int
*/
const START = 0;
}
?>
Häufig verwendete PHPDoc-Blocks in WordPress
- @access
Benutzung:public
,private
oderprotected
Definiert die Zugriffssteuerung auf Funktionen und Methoden.@access private
bedeutet, dass die Funktion/Methode nicht dokumentiert werden soll, da sie nicht für den öffentlichen Einsatz erstellt wurde. - @deprecated
Benutzung:x.x.x Neuer Funktionsname
Gibt an, ab welcher Version des Plugins die Funktion für veraltet erklärt wurde. Sollte dreistellig sein. - @global
Benutzung:[Typ] $GLOBALS['varname']
Gibt an, ob eine globale Variable verwendet wurde. - @internal
Benutzung:[Beschreibung]
Kann für interne Anmerkungen benutzt werden. - @ingore
Benutzung: steht für sich allein.
Wenn das aktuelle Element komplett übersprungen werden soll (d.h. nur interne Nutzung). - @link
Benutzung:[URL]
Sollte nicht mehr benutzt werden, da veraltet. Nutzen Sie stattdessen@see
. - @method
Benutzung:[Typ] [Beschreibung]
Gibt eine magische Funktion innerhalb einer Klasse an. - @package
Benutzung:[Paketname]
Spezifiziert ein Paket, zu dem die Funktionen und Konstanten gehören. - @param
Benutzung:[Typ] $varname [Beschreibung]
Parameter einer Funktion oder einer Methode. - @return
Benutzung:[Typ] [Beschreibung]
Dokumentiert den Rückgabewert einer Funktion oder einer Methode. - @see
Benutzung:[Elementname]
Referenziert eine andere Methode, Funktion oder Klasse, auf die aufgebaut wird. Alternativ kann auch eine URL als Verweis angegeben werden. - @since
Benutzung:x.x.x [Beschreibung]
Dokumentiert, ab wann eine Funktion/Methode/Klasse zum Plugin hinzugefügt wurde. Sollte dreistellig sein. - @subpackage
Benutzung:[Name]
Spezifiziert eine Komponente, zu der alle Funktionen und Methode gehören. - @todo
Benutzung:[Beschreibung]
Beschreibt zukünftige Änderungen. - @type
Benutzung:[Typ] [Beschreibung]
Wird für die Typenbezeichnungen von Array-Werten benutzt. - @uses
Benutzung:klasse:methode()
oderklasse::$variable
oderfunktionsname()
. - @var
Benutzung:[Typ] [Beschreibung]
Datentyp für eine Klassenvariable sowie eine kurze Beschreibung dieser.