Your SlideShare is downloading. ×
Meine ersten 12 Monate als Plugin-Entwickler für WordPress - WP Camp 2012 Berlin
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

1,936
views

Published on

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

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

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,936
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Session: Meine ersten 12 Monate als Plugin-Entwickler für WordPressDavid 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 1David 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 voranbringenDavid 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 gleichenGeschmacksrichtung gibt... ...Geld verdienen wichtiger ist (dann: Marktplatzwechseln...!) 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
  • 8. Vorbereitung - Aufbau Hauptdatei 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
  • 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.phpDavid 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 konfliktfreiDavid 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 sowieandere 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 wurdeDavid 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 sichaushä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- undAusgaben 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/#phpCSS:http://make.wordpress.org/core/handbook/coding-standards/css/David Decker · deckerweb.de · WP Camp 2012
  • 17. Coding Standards Lesbar Verstehbar Erweiterbar Transportierbar TeamarbeitDavid 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 beachtenDavid 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 5Jahren davor! Allerdings würde ich den Start besser vorbereiten... Und sonst? -- Die WordPress Community rockt! :)David Decker · deckerweb.de · WP Camp 2012
  • 22. readme.txt Validator: http://wordpress.org/extend/plugins/about/validator/David Decker · deckerweb.de · WP Camp 2012
  • 23. SVN - Subversion: http://wordpress.org/extend/plugins/about/svn/David Decker · deckerweb.de · WP Camp 2012
  • 24. 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
  • 25. Danke! Fragen jetzt! Folien unter: deckerweb.de/wpcamp2012 plus: slideshare.net/deckerweb David Decker @deckerweb +David Decker deckerweb.de profiles.wordpress.org/daveshine translate.wpautobahn.comDavid Decker · deckerweb.de · WP Camp 2012
  • 26. /** 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 ); }}David Decker · deckerweb.de · WP Camp 2012