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

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

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

28d02f8d09fc32fccc0282efdc23a4e5?s=128

David Decker

October 13, 2012
Tweet

Transcript

  1. David Decker · deckerweb.de · WP Camp 2012 Meine ersten

    12 Monate als Plugin-Entwickler für WordPress Session:
  2. David Decker · deckerweb.de · WP Camp 2012 Beispiel DECKERWEB

    Erstes 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
  3. David Decker · deckerweb.de · WP Camp 2012 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 ?
  4. David Decker · deckerweb.de · WP Camp 2012 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...)
  5. David Decker · deckerweb.de · WP Camp 2012 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? ?
  6. 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? !
  7. David Decker · deckerweb.de · WP Camp 2012 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?
  8. David Decker · deckerweb.de · WP Camp 2012 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?
  9. David Decker · deckerweb.de · WP Camp 2012 (Datei-) Organisation

    Klare 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.txt wpcamp-test-plugin.php Textdomain? = Plugin-Slug! ('wpcamp-test-plugin') Hauptdateiname? = Plugin-Slug! (wpcamp-test-plugin.php)
  10. David Decker · deckerweb.de · WP Camp 2012 Grundprinzipien I

    Alles mit Präfix bitte! //Funktionen: function ddw_bptb_init() { // inhalt } //Konstanten: define( 'BPTB_PLUGIN_BASEDIR', ... ); //Variablen: $bptb_lang_dir //Klassen class DDW_BuddyPress_Toolbar { // inhalt } Bewährt: Initialen Plugin-Name abgekürzt o. Name der Agentur abgekürzt... Ziele: Einzigartig! Keine Kollisionen im PHP-Namensraum
  11. David Decker · deckerweb.de · WP Camp 2012 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
  12. 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 ever modifying the core code base.“ „Good extensible code makes it exceptionally easy to expand your own code base.“ --Pippin Williamson, pippinsplugins.com
  13. David Decker · deckerweb.de · WP Camp 2012 Modulare Plugins

    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 Know your hooks!
  14. David Decker · deckerweb.de · WP Camp 2012 Modulare Plugins

    Erweiterbarer 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!) WordPress Gravity Forms EDD Woo/ Jigo Genesis ...
  15. David Decker · deckerweb.de · WP Camp 2012 Sicherheit ESCAPE-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 !
  16. David Decker · deckerweb.de · WP Camp 2012 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/
  17. David Decker · deckerweb.de · WP Camp 2012 Coding Standards

    Lesbar Verstehbar Erweiterbar Transportierbar Teamarbeit
  18. David Decker · deckerweb.de · WP Camp 2012 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
  19. 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!)
  20. 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 ;-)
  21. 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! :)
  22. David Decker · deckerweb.de · WP Camp 2012 readme.txt Validator:

    http://wordpress.org/extend/plugins/about/validator/
  23. David Decker · deckerweb.de · WP Camp 2012 SVN -

    Subversion: http://wordpress.org/extend/plugins/about/svn/
  24. 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/
  25. 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
  26. 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' ); } }