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

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

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

}

}