Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Meine ersten 12 Monate als Plugin-Entwickler fü...

David Decker
October 13, 2012

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

David Decker

October 13, 2012
Tweet

More Decks by David Decker

Other Decks in Programming

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