Meine Erfahrungen mit dem Erstellen von Plugins für WordPress - was habe ich gelernt, worauf kommt es an? -- Hooks & Filter, Coding Standards, etc. -- ein bisschen aus dem Nähkästchen geplaudert. Vielleicht hilfreich für alle, die auch bei WordPress.org Plugins einstellen wollen, oder sich überhaupt mal an diese Materie heranwagen wollen...
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin
1. Session:
Meine ersten 12
Monate als
Plugin-Entwickler
für WordPress
David Decker · deckerweb.de · WP Camp 2012
2. Beispiel DECKERWEB
Erstes Plugin live am 1. Juli 2011
Seitdem insgesamt 26 Plugins
Bis gestern 183.096 Downloads! - DANKE :)
Plugins nach Einsatzgebiet:
WordPress generell: 2 bbPress 2.x: 3
Genesis Framework: 9 BuddyPress: 1
WooCommerce: 3 Easy Digital Downloads: 2
Jigoshop: 2 Gravity Forms: 1
Thesis, Xtreme One, iThemes: je 1
David Decker · deckerweb.de · WP Camp 2012
3. Beispiel DECKERWEB
?
Ursachen:
Wollte tiefer in WP-Materie eindringen
Hatte einige Ideen für Mini-Plugins
Konkreter Anlass:
Anfrage eines Freundes nach einer Lösung
Diese Lösung öffentlich zugänglich machen!
Generell:
Wissen teilen
Wo steht man?
Open Source voranbringen
David Decker · deckerweb.de · WP Camp 2012
4. Beispiel DECKERWEB
Sehr viele Downloads & Nutzer - unerwartet!
Viel positives Feedback, einige Kritik!
2 Kollaborationen (Dev4Press; Daniel Hüsken)
Einige Forks... :)
Feature bei WPMU.org
Erwähnt in Session eines U.S. WordCamps
Einige neue Übersetzungen (wächst)
Generelle Anfragen (Spitzenreiter: Woo & Jigo...)
David Decker · deckerweb.de · WP Camp 2012
5. ?
Ziele
Reizvolle Aufgabe?
Lernen, weiterbilden, ausprobieren...
Wissen teilen!
Lösungen teilen!
Reputation verbessern
Der Öffentlichkeit stellen - Wo steht man?
WordPress bzw. Open Source Contributor werden
DEINE Gründe?
David Decker · deckerweb.de · WP Camp 2012
6. !
Lieber sein lassen, falls...
...man gar keine Zeit für Support hat
...nicht kritikfähig
...“SVN“ gar nicht geht :)
...es schon 500 Plugins der gleichen
Geschmacksrichtung gibt...
...Geld verdienen wichtiger ist (dann: Marktplatz
wechseln...!)
WEITERE Gründe?
David Decker · deckerweb.de · WP Camp 2012
7. Grundkonzept
Eigentliche Funktionalität und Typ des Plugins
Eigenständiges Plugin?
Plugin-Plugin?
Theme-Plugin?
Functionality-/ Site-Plugin? (...MU-Plugin?)
(Inline-) Dokumentation (ggf. gesondert für Entwickler)
Lokalisierung! ...und Management!
Bereit für Support?
Evtl. Branding? / Evtl. „Vermarktung“?
Bedingungen des Repositories bzw. Marktplatzes?
David Decker · deckerweb.de · WP Camp 2012
9. (Datei-) Organisation
Klare Ordnung aller Dateien/ Assets
Saubere Benennung aller Dateien
Alle benötigten Dateien/ Bibliotheken im Plugin!
../wp-content/plugins/
/wpcamp-test-plugin/ Textdomain?
/css/ = Plugin-Slug!
/images/ ('wpcamp-test-plugin')
/includes/
admin-settings.php Hauptdateiname?
/js/ = Plugin-Slug!
/languages/ (wpcamp-test-plugin.php)
readme.txt
wpcamp-test-plugin.php
David Decker · deckerweb.de · WP Camp 2012
10. Grundprinzipien I
Alles mit Präfix bitte!
//Funktionen: Bewährt:
function ddw_bptb_init() { Initialen
// inhalt
Plugin-Name abgekürzt
}
o. Name der Agentur
//Konstanten: abgekürzt...
define( 'BPTB_PLUGIN_BASEDIR', ... );
Ziele:
//Variablen:
Einzigartig!
$bptb_lang_dir
Keine Kollisionen im
//Klassen PHP-Namensraum
class DDW_BuddyPress_Toolbar {
// inhalt
}
David Decker · deckerweb.de · WP Camp 2012
11. Grundprinzipien II
Code nur laden, wenn er gebraucht wird!
is_admin(), is_multisite(), is_network_admin() usw.
Code splitten (Optionen, eigentl. Formulare, etc.)
CSS, Skripte einhängen/ „enqueue“
Backend/ Frontend beachten
jQuery nur von WordPress verwenden
NUR laden, wo es gebraucht wird, NICHT überall
Abhängigkeiten beachten!
Standardkonformer Code = performant und konfliktfrei
David Decker · deckerweb.de · WP Camp 2012
12. Modulare Plugins
„Extensible, or modular code, is code that can be modified,
interacted with, added to, or manipulated . . . all without ever
modifying the core code base.“
„Good extensible code makes it exceptionally easy to expand
your own code base.“
--Pippin Williamson, pippinsplugins.com
Nahtloses zusammenarbeiten mit WordPress sowie
andere Plugins und Themes/ Frameworks
Niemals den Core berühren! (WP, Plugins, Frameworks/ Themes)
Hilf Dir selber ...und Deinen Benutzern!
David Decker · deckerweb.de · WP Camp 2012
13. Modulare Plugins Know
your
hooks!
Hooks und Filter == WordPress-Konzept!
apply_filters()
Einen Filter-Hook einrichten, der via add_filter() angesprochen wird
add_filter()
(Text-) Strings oder sonstige Daten über bestehenden "Hook" ÄNDERN
has_filter() – Prüfen, ob ein Filter existiert
do_action()
Einen Einhängepunkt (Hook) einrichten, der alle eingehängten
Funktionen via add_action() ausführt
add_action()
Eine Funktion in einen bestehenden Hook einhängen
remove_action()
Eine Funktion aus einem bestehenden Hook aushängen
has_action()
Erlaubt Prüfung, ob eine bestehende Aktion registriert wurde
David Decker · deckerweb.de · WP Camp 2012
14. Modulare Plugins WordPress
Gravity Forms
EDD
Woo/ Jigo
Erweiterbarer Code Genesis
...
„Manipularer“ Code, d.h. filterbar
Funktionen, CSS-Stile, JS-Skripte lassen sich
aushängen, eigene einhängen
(Übersetzungs-) Strings lassen sich einfach ändern
(Filter!)
Parameter aus Arrays lassen sich einfach anpassen,
ergänzen (Filter!)
David Decker · deckerweb.de · WP Camp 2012
15. Sicherheit
ESCAPE-Funktionen (HTML, Attribute, URLs)
SANITIZING-Funktionen - Benutzerein- und
Ausgaben absichern („heilen“)
!
Der Codex hilft!
Betrifft: codex.wordpress.org
Admin-Optionen
Alle (Admin-) Formulare, Eingaben, Ausgaben
URLs! (bis hin zu WP-eigenen Permalinks etc.)
Übersetzungs-Strings (Stichwort: Filter!)
David Decker · deckerweb.de · WP Camp 2012
16. Coding Standards
Danke, Gary Jones! (@GaryJ)
Ohne „Regeln“ geht es auch hier nicht!
Siehe: „Core Contributor Handbook“
PHP:
http://make.wordpress.org/core/handbook/coding-standards/#php
CSS:
http://make.wordpress.org/core/handbook/coding-standards/css/
David Decker · deckerweb.de · WP Camp 2012
18. Best Practices
Plugin: Modular arbeiten (Know your hooks :)
Titel/ Slug bei WordPress.org checken!
readme.txt Validator (Markdown-Format)
Doku: alles beschreiben, was geht
Doku: alle Hooks, Filter dokumentieren
Doku: FAQ-Bereich? (vorsorglich...)
Sprachdatei-Verzeichnis filterbar machen
/wp-admin/ Plugin-Suche beachten
David Decker · deckerweb.de · WP Camp 2012
19. Wichtige Werkzeuge:
define( 'WP_DEBUG', true ); (wp-config.php)
Testen! Testen! Testen!
Am besten auf einer live-Umgebung
Multisite nicht vergessen! (Netzwerkweit aktivieren)
WP-Version? PHP-Version? Serverumgebung?
Plugins: Rewrite Rules Inspector
Debug Bar Developer
WP Admin Error Handler WordPress Beta Tester
User Switching Codestyling Localization
GlotPress (kein Plugin!)
David Decker · deckerweb.de · WP Camp 2012
20. Plugin live, was nun?
Downloads, Downloads, Downloads...
Support, Support, Support!
Updates, Updates, Updates... (Bugs, Bugs, Bugs...)
Nach 3 Monaten? Nach 6 Monaten...?
(Stichwort: Code Refactoring)
Dokumentation live schalten & verbessern
Evtl. eigenes Support-Forum (mehrsprachig?)
Neue Ideen ;-)
David Decker · deckerweb.de · WP Camp 2012
21. Würde ich es wieder tun?
JA, auf jeden Fall! ;-)
Unverzichtbare (Code-) Erkenntnisse und
(menschliche) Erfahrungen!
In einem Jahr mehr über WordPress gelernt, als in 5
Jahren davor!
Allerdings würde ich den Start besser vorbereiten...
Und sonst? -- Die WordPress Community rockt! :)
David Decker · deckerweb.de · WP Camp 2012