Bei Themes kannst du als Ergänzung zu einem Theme ein „Child Theme“ erstellen. Ein „Child-Plugin“ gibt es aber nicht. Da kannst du nur entweder ein Plugin komplett deaktivieren und statt dessen dein eigenes Plugin schreiben oder einzelne Funktionen überschreiben. Dazu ein (stark vereinfachtes) Beispiel:
Nehmen wir an, ein Plugin „Mit viel Liebe“ fügt mit einer Funktion im Footer der Webseite die Bemerkung „Mit viel Liebe gemacht.“ hinzu. Daraus möchtest du stattdessen „Schon wieder eine liebevoll gestaltete Website von mir.“ machen.
Das Plugin verwendet zum Einbinden einen Filter, damit die Ausgabe der Funktion an der richtigen Stelle erfolgt:
add_action( 'wp_footer', 'mit_viel_liebe' );
function mit_viel_liebe() {
echo 'Mit viel Liebe gemacht';
}
Um das zu überschreiben, solltest du erst einmal prüfen, ob die Funktion existiert (damit keine Fehler produziert werden, wenn jemand das Plugin „Mit viel Liebe“ deaktiviert):
if( function_exists( 'mit_viel_liebe' ) {
// mach irgendwas
}
Die auskommentierte Zeile // mach irgendwas
können wir gleich mit der Ausgabe der neuen Zeichenkette ersetzen:
if( function_exists( 'mit_viel_liebe' ) {
echo 'Schon wieder eine liebevoll gestaltete Website von mir.';
}
Nun soll das ja auch wieder im Footer ausgegeben werden. Also verwenden wir einen Hook, wie ihn das andere Plugin ja auch genutzt hat. Nur nehmen wir hier einen eigenen Funktionsnamen:
add_action( 'wp_footer', 'kreativ_gestaltet' );
function kreativ_gestaltet() {
if( function_exists( 'mit_viel_liebe' ) {
echo 'Schon wieder eine liebevoll gestaltete Website von mir.';
}
}
Allerdings wird jetzt unser eigener Text zusammen mit dem Text aus dem anderen Plugin ausgegeben. Damit das nicht mehr passiert, müssen wir die Verknüpfung der Funktion mit_viel_liebe()
mit dem Hook wp_footer
aufheben:
remove_action( 'wp_footer', 'mit_viel_liebe' );
Das können wir in unsere Funktion packen:
add_action( 'wp_footer', 'kreativ_gestaltet' );
function kreativ_gestaltet() {
if( function_exists( 'mit_viel_liebe' ) {
remove_action( 'wp_footer', 'mit_viel_liebe' );
echo 'Schon wieder eine liebevoll gestaltete Website von mir.';
}
}
Damit haben wir diese eine Funktion des Plugins Mit viel Liebe
mit einer eigenen Funktion überschrieben, während alle weiteren Funktionen normal weiterlaufen.
Nicht alle Funktionen eines Plugin werden über Hooks eingebunden und oft werden Funktion von anderen Funktionen genutzt, was einen Austausch erschwert oder unmöglich macht. Im günstigen Fall hat der Plugin-Entwickler die Funktionen überschreibbar gemacht, in dem er für jede Funktion prüft, ob sie bereits woanders definiert wurde:
if(! function_exists( 'name_der_funktion' ) ) {
function name_der_funktion() {
// Code
}
}
in dem Fall kannst du in einem Plugin dann einfach eine eigene Funktion mit dem gleichen Namen schreiben, die dann die Aufgabe übernimmt.