23
Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Child PluginsWordCamp Frankfurt 2016

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Page 2: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Wer ich bin

• Bernhard Kau

• Wahlberliner

• PHP-Entwickler

• WordPress-Plugin Hobby-Entwickler

• Organisator des WP Meetup Berlin

• Blogge auf kau-boys.de

• Twittere unter @2ndkauboy

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 2

Page 3: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Es begann alles mit einem Tweet

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 3

https://twitter.com/PRwebcare/status/733402190195253250

Page 4: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Was sind Child Plugins?

Ein Mythos

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 4

Page 5: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Wozu überhaupt Child Plugins?

• Plugins erweitern

• Plugin an die eigenen Anforderungen anpassen

• Ohne den Code des Plugins anzufassen

• Um keine bösen Überraschungen bei Updates zu erleben

• Genau wie bei Child Themes

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 5

Page 6: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Anpassungsmöglichkeiten

1. Konstanten

2. Hooks (Actions und Filters)

3. Funktionen überschreiben

4. Templates überschreiben

5. Plugin forken

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 6

Page 7: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Konstanten in Plugins (Beispiel)

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 7

if ( ! defined( 'WPCF7_LOAD_JS' ) ) {define( 'WPCF7_LOAD_JS', true );

}

Code im Plugin:

define( 'WPCF7_LOAD_JS', false );

Verwendung im Child Plugin:

Page 8: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Konstanten in Plugins (Probleme)

• Sie sind konstant

• Man kann sie also nicht nachträglich verändern

• Daher sollte den Einsatz von Konstanten vermeiden

• Besser durch einen Filter ersetzen

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 8

Page 9: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Hooks in Plugins

• Es gibt zwei Arten von Hooks:• Actions

• Filters

• In Actions „tut man etwas“• Haben in der Regel „Seiteneffekte“

• Haben normalerweise keinen Rückgabewert

• In Filtern „verändert man etwas“• Bekommen meistens eine oder mehrere Variablen übergeben

• Geben die veränderte Eingabe zurück

• Sollten keine Seiteneffekte haben

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 9

Page 10: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Actions in Plugins (Beispiel)

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 10

public function save() {// ...

if ( $post_id ) {// ...

if ( $this->initial() ) {$this->id = $post_id;do_action( 'wpcf7_after_create', $this );

} else {do_action( 'wpcf7_after_update', $this );

}

do_action( 'wpcf7_after_save', $this );}

return $post_id;}

Page 11: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Actions in Plugins (Beispiel)

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 11

function child_plugin_wpcf7_after_save_do_things( WPCF7_ContactForm $contact_form ) {// Do something after the contact form was saved

}add_action( 'wpcf7_after_save', 'child_plugin_wpcf7_after_save_do_things' );

function child_plugin_wpcf7_after_save_do_stuff( WPCF7_ContactForm $contact_form ) {// Do something else after the contact form was saved

}add_action( 'wpcf7_after_save', 'child_plugin_wpcf7_after_save_do_stuff' );

Page 12: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Filters in Plugins (Beispiel)

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 12

function allow_svg_mime_types( $mimes, $user ) {$mimes['svg'] = 'image/svg+xml';return $mimes;

}add_filter( 'upload_mimes', 'allow_svg_mime_types', 10, 2 );

Page 13: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Filters in Plugins (Beispiel)

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 13

function wpcf7_load_js() {return apply_filters( 'wpcf7_load_js', WPCF7_LOAD_JS );

}

function child_plugin_deactivate_wpcf7_load_js( $load_js ) {return false;

}add_action( 'wpcf7_load_js', 'child_plugin_deactivate_wpcf7_load_js' );

add_action( 'wpcf7_load_js', '__return_false' );

Page 14: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Hooks in Plugins (Vorteile)

• Es können mehrere Funktionen für einen Hook registriert werden

• Werte können nachträglich geändert werden

• Hooks können auch wieder entfernt werden

• Innerhalb der Funktionen können Bedingungen geprüft werden

• Anpassungen können so einfacher ermöglicht werden

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 14

Page 15: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Funktionen überschreiben

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 15

function hello_dolly_get_lyric() {/** These are the lyrics to Hello Dolly */$lyrics = "Hello, Dolly

Well, hello, Dolly...";

// Here we split it into lines$lyrics = explode( "\n", $lyrics );

// And then randomly choose a linereturn wptexturize( $lyrics[ mt_rand( 0, count( $lyrics ) - 1 ) ] );

}

// This just echoes the chosen line, we'll position it laterfunction hello_dolly() {

$chosen = hello_dolly_get_lyric();echo "<p id='dolly'>$chosen</p>";

}

// Now we set that function up to execute when the admin_notices action is calledadd_action( 'admin_notices', 'hello_dolly' );

Page 16: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Funktionen überschreiben

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 16

// remove original "Hello Dolly" output function and register the new onefunction remove_hello_dolly_remove_action() {

remove_action( 'admin_notices', 'hello_dolly' );add_action( 'admin_notices', 'we_are_the_champions' );

}add_action( 'plugins_loaded', 'remove_hello_dolly_remove_action', 11 );

function we_are_the_champions_get_lyric() {/** These are the lyrics to We are the Champions */$lyrics = "I've paid my dues

Time after time...";

// …}

// This just echoes the chosen line, we'll position it laterfunction we_are_the_champions() {

$chosen = we_are_the_champions_get_lyric();echo "<p id='dolly'>$chosen</p>";

}

Page 17: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Funktionen überschreiben

Vorteile

• Man kann Plugins anpassen, die keine Hooks anbieten

• Ein Verändern des Originalcodes ist nicht notwendig

• Änderungen bleiben bei Updates erhalten

Nachteile

• Stichwort: Child Theme Dilemma

• Änderungen am Plugin müssen manuell übertragen werden

• Bei Updates kann es zu schweren Fehlern kommen

• Ein Anpassen ist nicht immer möglich oder kommt fast einer Neuimplementierung gleich

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 17

Page 18: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Templates überschreiben

Meine Empfehlungen für Templates in Plugins:

• Plugins sollten unabhängig vom Theme sein

• Sie sollten möglichst mit jedem Theme einsetzbar sein

• Das Mitliefern von Standardtemplates ist sinnvoll

• Solche Templates sollten nur die Struktur vorgeben

• Templates und sonstige Textausgaben sollten filterbar sein

• Suche nach Template: Child Theme -> Parent Theme -> Plugin

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 18

Page 19: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Templates überschreiben

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 19

function my_custom_wc_locate_template( $template, $template_name, $template_path ) {

$template_overwrite = dirname( __FILE__ ) . '/templates/' . $template_name;

if ( file_exists( $template_overwrite ) ) {$template = $template_overwrite;

}

return $template;}

add_filter( 'woocommerce_locate_template', 'my_custom_wc_locate_template', 10, 3 );

Page 20: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Plugin forken

• Ist das Plugin nicht erweiterbar, kann sich ein Fork (Kopie) lohnen

• Hierzu das Plugin in der aktuellen Version in einem VCS speichern

• Einen Branch für die eigenen Anpassungen erstellen

• Den Pluginnamen ändern (sonst wird es per Update überschrieben)

• Änderungen aus dem Originalplugin bei Updates mergen

• Hierzu den „Development Log“ RSS-Feed abonnieren

• Eventuell einen Pull-Request auf das Originalplugin erstellen

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 20

Page 21: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Empfohlene Reihenfolge bei Anpassungen

1. Hooks, API, Template-Struktur und Konstanten nutzen

2. Im Supportforum um Anpassung bitten

3. Funktionen überschreiben

4. Das Plugin forken

5. Den Fork im Supportforum veröffentlichen und Merge vorschlagen

6. Das eigene Plugin veröffentlichen mit Verweis auf Originalplugin

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 21

Page 22: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Quellen

• https://kau-boys.de/2745/wordpress/child-plugins-konstanten-definieren-um-plugins-anzupassen

• http://torstenlandsiedel.de/2016/02/07/das-child-theme-dilemma/

• https://codex.wordpress.org/Plugin_API

• https://docs.woocommerce.com/document/template-structure/

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 22

Page 23: Child Plugins - Kau-Boys · Child Plugins WordCamp Frankfurt 2016 #wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 1

Fragen?

Vielen Dank!

#wcfra | 04.09.2016 Bernhard Kau | @2ndkauboy | kau-boys.de 23