Upload
david-decker
View
2.024
Download
4
Embed Size (px)
DESCRIPTION
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...
Citation preview
David Decker · deckerweb.de · WP Camp 2012
Meine ersten 12Monate alsPlugin-Entwicklerfür WordPress
Session:
David Decker · deckerweb.de · WP Camp 2012
Beispiel DECKERWEBErstes Plugin live am 1. Juli 2011
Seitdem insgesamt 26 Plugins
Bis gestern 183.096 Downloads! - DANKE :)
Plugins nach Einsatzgebiet:bbPress 2.x: 3
BuddyPress: 1
Easy Digital Downloads: 2
Gravity Forms: 1
Thesis, Xtreme One, iThemes: je 1
WordPress generell: 2
Genesis Framework: 9
WooCommerce: 3
Jigoshop: 2
David Decker · deckerweb.de · WP Camp 2012
Beispiel DECKERWEBUrsachen:
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
Beispiel DECKERWEBSehr 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
ZieleReizvolle 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
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
GrundkonzeptEigentliche 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
Vorbereitung - AufbauHauptdatei mit Plugin-Kopf (Header, Meta, Lizenz)
Funktionen?
Klasse - Methoden?
Variablen
Konstanten
Querschnittsaufgabe: Lokalisierung
WordPress.org: readme.txt (generell sinnvoll!)
Andere Repositories/ Marktplätze?
David Decker · deckerweb.de · WP Camp 2012
(Datei-) OrganisationKlare Ordnung aller Dateien/ Assets
Saubere Benennung aller Dateien
Alle benötigten Dateien/ Bibliotheken im Plugin!../wp-content/plugins/
/wpcamp-test-plugin//css//images//includes/
admin-settings.php/js//languages/readme.txtwpcamp-test-plugin.php
Textdomain?= Plugin-Slug!('wpcamp-test-plugin')
Hauptdateiname?= Plugin-Slug!(wpcamp-test-plugin.php)
David Decker · deckerweb.de · WP Camp 2012
Grundprinzipien IAlles mit Präfix bitte!//Funktionen:function ddw_bptb_init() {
// inhalt}
//Konstanten:define( 'BPTB_PLUGIN_BASEDIR', ... );
//Variablen:$bptb_lang_dir
//Klassenclass DDW_BuddyPress_Toolbar {
// inhalt}
Bewährt:InitialenPlugin-Name abgekürzto. Name der Agentur
abgekürzt...
Ziele:Einzigartig!Keine Kollisionen im
PHP-Namensraum
David Decker · deckerweb.de · WP Camp 2012
Grundprinzipien IICode 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 verwendenNUR laden, wo es gebraucht wird, NICHT überall
Abhängigkeiten beachten!
Standardkonformer Code = performant und konfliktfrei
David Decker · deckerweb.de · WP Camp 2012
Modulare Plugins
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!
„Extensible, or modular code, is code that can be modified,interacted with, added to, or manipulated . . . all without evermodifying the core code base.“
„Good extensible code makes it exceptionally easy to expandyour own code base.“
--Pippin Williamson, pippinsplugins.com
David Decker · deckerweb.de · WP Camp 2012
Modulare PluginsHooks und Filter == WordPress-Konzept!apply_filters()
Einen Filter-Hook einrichten, der via add_filter() angesprochen wirdadd_filter()
(Text-) Strings oder sonstige Daten über bestehenden "Hook" ÄNDERNhas_filter() – Prüfen, ob ein Filter existiert
do_action()Einen Einhängepunkt (Hook) einrichten, der alle eingehängtenFunktionen 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
Knowyour
hooks!
David Decker · deckerweb.de · WP Camp 2012
Modulare PluginsErweiterbarer Code
„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!)
WordPressGravity Forms
EDDWoo/ JigoGenesis
...
David Decker · deckerweb.de · WP Camp 2012
SicherheitESCAPE-Funktionen (HTML, Attribute, URLs)
SANITIZING-Funktionen - Benutzerein- und
Ausgaben absichern („heilen“)
Betrifft:Admin-Optionen
Alle (Admin-) Formulare, Eingaben, Ausgaben
URLs! (bis hin zu WP-eigenen Permalinks etc.)
Übersetzungs-Strings (Stichwort: Filter!)
Der Codex hilft!codex.wordpress.org
!
David Decker · deckerweb.de · WP Camp 2012
Coding StandardsDanke, 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
Coding StandardsLesbar
Verstehbar
Erweiterbar
Transportierbar
Teamarbeit
David Decker · deckerweb.de · WP Camp 2012
Best PracticesPlugin: 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
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:
Debug Bar
WP Admin Error Handler
User Switching
Rewrite Rules Inspector
Developer
WordPress Beta Tester
Codestyling Localization
GlotPress (kein Plugin!)
David Decker · deckerweb.de · WP Camp 2012
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
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
readme.txt Validator:
http://wordpress.org/extend/plugins/about/validator/
David Decker · deckerweb.de · WP Camp 2012
SVN - Subversion:
http://wordpress.org/extend/plugins/about/svn/
David Decker · deckerweb.de · WP Camp 2012
Verwendete Quellen:http://wordpress.org/extend/plugins/about/ (Dev Center)
http://wordpress.org/extend/plugins/about/faq/
http://wordpress.org/extend/plugins/about/validator/ (redme.txt Check)
http://pippinsplugins.com/lets-talk-extensible-code/
http://pippinsplugins.com/modular-plugins-presentation-from-wordcamp-
kansas-city-2012/
http://make.wordpress.org/core/handbook/coding-standards/#php
http://make.wordpress.org/core/handbook/coding-standards/css/
http://www.dev4press.com/2011/tutorials/wordpress/practical/how-to-
optimize-plugin-loading/
David Decker · deckerweb.de · WP Camp 2012
David Decker
@deckerweb
+David Decker
deckerweb.de
profiles.wordpress.org/daveshine
translate.wpautobahn.com
Danke! Fragen jetzt!Folien unter: deckerweb.de/wpcamp2012
plus: slideshare.net/deckerweb
David Decker · deckerweb.de · WP Camp 2012
/** Call for break and add next session */add_action( 'wpcamp_berlin_2012', 'wpc_next_session_planning' )function wpc_next_session_planning() {
if ( is_break( array( 10min, coffee, wc ) ) ) {
wpcamp_do_next_session();echo __( 'Enjoy the break', 'wpcamp' );
} else {
wpcamp_do_celebrate_community();echo __( 'Enjoy the conversation', 'wpcamp' );
}
}