Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin

26
David Decker · deckerweb.de · WP Camp 2012 Meine ersten 12 Monate als Plugin-Entwickler für WordPress Session:

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

Transcript of Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin

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' );

}

}