Advertisement
  1. Web Design
  2. WordPress

Ein Leitfaden zum Überschreiben von Parent-Theme-Funktionen in Ihrem Child-Theme

Scroll to top
Read Time: 10 min

() translation by (you can also view the original English article)

Wenn Sie irgendwelche Erfahrung mit Parent- und Child-Themes in WordPress haben, werden Sie wissen, dass die Vorlagendateien in Ihrem Child-Theme die Vorlagendateien in Ihrem Parent-Theme überschreiben. Wenn Ihr Parent-Theme beispielsweise eine page.php Datei hat und Sie eine neue in Ihrem untergeordneten Design erstellen, verwendet WordPress die Datei im Child-Theme wenn Seiten angezeigt werden.

Sie könnten denken, dass Funktionen auf die gleiche Weise funktionieren würden: Erstellen Sie eine neue Funktion in der functions.php Datei Ihres Child-Theme functions.php mit dem gleichen Namen wie eine im Parent-Theme, und sie hat Vorrang. Leider ist es nicht so einfach wie dieses.

In diesem Tutorial zeige ich Ihnen drei Methoden, mit denen Sie Funktionen aus dem Parent-Theme in Ihrem Child-Theme überschreiben können:

  • Pluggable Funktionen
  • Funktionspriorität
  • Entfernen von Funktionen von dem Haken, an dem sie befestigt sind

Wie Funktionen in Eltern- und Child-Themes funktionieren

Bevor Sie die Methoden zum Überschreiben von Funktionen in ihren Child-Theme untersuchen, hilft es zu verstehen, wie Funktionen in Parent- und Child-Themes funktionieren.

Erstens müssen Sie wissen, dass alle Funktionen in Ihrem Parent-Theme ausgeführt werden, wenn Sie ein Child-Theme verwenden. Sie müssen der Funktionsdatei Ihres Child-Themes nichts hinzufügen, um dies zu erreichen. Dies unterscheidet sich von CSS, bei dem Sie das Stylesheet des Parent-Themes manuell in das Stylesheet des Child-Theme aufnehmen müssen.

Eine andere Sache zu wissen ist, dass, wenn Ihre Parent- und Child-Theme Funktionen mit dem gleichen Namen haben, wird dies Ihre Website brechen – es sei denn, die Funktion im übergeordneten Thema ist eine pluggable Funktion (mehr dazu in Kürze). Aus diesem Grund ist es wichtig, Präfixe für alle Funktionen zu verwenden und ein anderes Präfix in Parent- und Child-Theme zu verwenden – nur als Vorsichtsmaßnahme.

Sie können jedoch die Reihenfolge ändern, in der Funktionen ausgelöst werden, und Sie können verhindern, dass Funktionen vollständig ausgelöst werden, wie wir in Kürze sehen werden.

Pluggable Funktionen

Pluggable Funktionen sind etwas, das Sie in Ihr Parent-Theme codieren, sodass sie für Sie nicht von Nutzen sind, wenn Sie mit einem vorhandenen Parent-Theme arbeiten, das sie nicht enthält.

Aber wenn Sie Ihr eigenes Parent-Theme schreiben, vielleicht als Ausgangspunkt für zukünftige Projekte, oder wenn Sie Ihr eigenes Designframework erstellen, ist es eine gute Praxis, Ihre Funktionen pluggable zu machen, damit Sie sie problemlos in Child-Themes überschreiben können. Es ist auch eine gute Idee, die Funktionen durchzusehen, die in dem Parent-Theme vorhanden sind, das Sie verwenden, da viele von ihnen, einschließlich der WordPress-Standard-Themes, pluggable Funktionen haben.

Um eine pluggable Funktion zu schreiben, schließen Sie sie einfach in ein bedingtes Tag ein, um zu überprüfen, ob eine Funktion mit diesem Namen bereits ausgeführt wurde:

1
<?php
2
if ( ! function_exists ( 'my_function' ) ) {
3
    function my_function() {
4
        // Contents of your function here.

5
    }
6
}
7
?>

Also, wenn Sie die Funktionen in Ihrem Parent-theme in einem bedingten Tag wie diesem einschliessen, wird WordPress überprüfen, ob es eine Funktion mit dem gleichen Namen in Ihrem Child-Theme, gibt, die bereits ausgeführt wurde, und wenn das der Fall ist, wird es die Funktion aus dem Parent-Theme ausführen.

Wenn Sie dann eine Funktion in Ihr Child-Theme schreiben, die Sie im Parent-Theme überschreiben möchten, geben Sie ihr einfach den gleichen Namen wie im übergeordneten Design:

1
<?php
2
function my_function() {
3
    // Contents for your function override here.

4
}
5
?>

WordPress wird die Funktion im Child-Theme zuerst ausführen, und wenn es zu der Funktion im Parent-Theme kommt, wird es überprüfen, ob sie bereits existiert und weil sie existiert, wird die Funktion nicht ausgeführt.

Funktionspriorität

Wenn Sie kein eigenes Parent-Theme verwenden oder ein Drittanbieter ohne pluggable Funktionen verwenden, benötigen Sie eine andere Methode.

Wenn Sie Funktionen schreiben, können Sie ihnen eine Priorität zuweisen, die WordPress mitteilt, wann sie ausgeführt werden sollen. Sie tun dies, wenn Sie Ihre Funktion zu einer Aktion oder einem Filter-Hook hinzufügen. WordPress führt dann die Funktionen, die an einen bestimmten Hook angehängt sind, in aufsteigender Reihenfolge der Priorität aus, sodass diejenigen mit höheren Zahlen zuletzt ausgeführt werden.

Stellen wir uns vor, die Funktion im Parent-Theme ist nicht pluggable und sieht wie folgt aus:

1
<?php
2
function parent_function() {
3
    // Contents for your function here.

4
}
5
add_action( 'init', 'parent_function' );
6
?>

Diese Funktion ist an den init-Hook angehängt und hat keine Priorität erhalten. Standardmäßig weist WordPress Funktionen, die keine Priorität hinzugefügt haben, eine Priorität von 10 zu, sodass Sie eine Zahl verwenden, die größer als 10 ist, um Ihre Funktion danach zu feuern. Ich neige dazu, 15 zu verwenden, so dass ich etwas Luft zum Atmen habe, falls ich später eine weitere Funktion zwischen den beiden hinzufügen möchte.

Dies bedeutet, dass die Funktion in Ihrem Child-Theme wie folgt aussehen würde:

1
<?php
2
function child_function() {
3
    // Contents for your function here.

4
}
5
add_action( 'init', 'child_function', 15 );
6
?>

Alternativ kann der Funktion in Ihrem Parent-Theme eine Priorität zugewiesen worden sein:

1
<?php
2
function parent_function() {
3
    // Contents for your function here.

4
}
5
add_action( 'init', 'parent_function', 20 );
6
?>

Sie müssen also nur sicherstellen, dass die Priorität, die Sie der Funktion in Ihrem Child-Theme geben, höher ist:

1
<?php
2
function child_function() {
3
    // Contents for your function here.

4
}
5
add_action( 'init', 'child_function', 25 );
6
?>

Entfernen von Funktionen aus Hooks

Manchmal reicht das Ausführen einer anderen Funktion nach der ersten nicht aus, um sie zu überschreiben – Sie müssen sicherstellen, dass die Funktion im Parent-Theme überhaupt nicht ausgeführt wird. In diesem Fall können Sie die Parent-Theme-Funktion aus dem Hook entfernen, an den sie angefügt ist, indem Sie die Funktionen remove_action() oder remove_filter() verwenden. Die von Ihnen verwendende Funktion hängt davon ab, ob die Funktion an einen Aktions- oder Filter-Hook im Parent-Theme angehängt ist.

Kehren wir also zu unserer vorherigen Funktion im Parent-Theme zurück:

1
<?php
2
function parent_function() {
3
    // Contents for your function here.

4
}
5
add_action( 'init', 'parent_function' );
6
?>

Um diese Funktion aus ihrem Aktions-Hook zu entfernen und somit das Auslösen zu verhindern, erstellen Sie eine Funktion in Ihrem Child-Theme, um sie mit remove_action() zu entfernen:

1
<?php
2
remove_action( 'init', 'parent_function' );
3
?>

Dies funktioniert jedoch nicht von selbst – Sie müssen diese Funktion an einen Haken anhängen, der nach dem Haken ausgelöst wird, an den die Funktion des Parent-Themes angehängt ist. Dies liegt daran, dass Sie die Aktion nicht entfernen können, bevor sie ausgelöst wurde. Details zur Reihenfolge, in der Aktionen ausgelöst werden, finden Sie im Codex.

1
<?php
2
function child_remove_parent_function() {
3
    remove_action( 'init', 'parent_function' );
4
}
5
add_action( 'wp_loaded', 'child_remove_parent_function' );
6
?>

Sobald Sie dies getan haben, können Sie einfach eine alternative Funktion schreiben, um die Funktion des Parent-Themes in der Funktionsdatei Ihres Parent-Themes zu ersetzen, oder Sie können nichts tun, wenn Sie nur die Funktionalität aus dem Parent-Theme entfernen wollten.

Ein Hinweis zu Prioritäten

Wenn Sie versuchen, eine Funktion mit remove_action() oder remove_filter() zu entfernen, und der Funktion eine Priorität zugewiesen wurde, müssen Sie die Priorität beim Entfernen nennen, andernfalls funktioniert dies nicht.

Wenn also die Funktion im Parent-Theme wie folgt aussieht:

1
<?php
2
function parent_function() {
3
    // Contents for your function here.

4
}
5
add_action( 'init', 'parent_function', 15 );
6
?>

... müssen Sie beim Entfernen denselben Prioritätswert nennen:

1
<?php
2
function child_remove_parent_function() {
3
    remove_action( 'widgets_init', 'parent_function', 15 );
4
}
5
add_action( 'wp_loaded', 'child_remove_parent_function' );
6
?>

Erweiterte Parent- und Child-Theme-Funktionen: Pluggable Funktionen und Erweiterbare Funktionen

Neben den oben genannten, gibt es einige spezifische Szenarien, in denen Sie die Dinge möglicherweise weiter gehen möchten. Die folgenden Tipps sind als Antwort auf Fragen, die in den Kommentaren unten gestellt wurden.

So überschreiben Sie eine Funktion im Parent-Theme partiell

Streng genommen können Sie eine Funktion nicht partiell überschreiben. Sie können sie nur laufen lassen oder deaktivieren. Aber es gibt Problemumgehungen.

Die erste ist, wenn die Funktion, die Sie teilweise überschreiben möchten, Funktionen enthält, die pluggable sind. Möglicherweise enthält die Funktion einen Aufruf einer anderen pluggable Funktion innerhalb des Parent-Themes.

Wenn dies der Fall ist, können Sie alle Funktionen innerhalb der Hauptfunktion überschreiben, wenn dies der Code ist, den Sie ändern möchten. Tun Sie dies, indem Sie eine neue Version der pluggable-Funktion schreiben, die entweder nur eine return-Anweisung oder alternativen Code enthält. Beachten Sie, dass dies nur funktioniert, wenn die Funktion pluggable ist – wenn dies nicht der Grund ist, wird Ihre Website möglicherweise nicht mehr gezeigt.

Diese Methode funktioniert jedoch nur, wenn Sie das Glück haben, Funktionen innerhalb einer Funktion außer Kraft setzen zu müssen, die von einer anderen enthaltenen und pluggable Funktion bereitgestellt wird.

In den allermeisten Fällen wird dies keine Option sein. In diesen Fällen müssen Sie die Funktion deaktivieren und durch eine eigene Funktion mit einem anderen Namen ersetzen. Um Ihre neue Funktion zu erstellen, können Sie die Funktion aus dem übergeordneten Design kopieren und in die functions.php Datei des Child-Themes einfügen, und sie dann bearbeiten, um den Code zu entfernen, den Sie nicht möchten.

Sie würden zwei Ihrer eigenen Funktionen verwenden: eine zum Entfernen der ursprünglichen und die zweite zum Bereitstellen von neuem Code, welcher z. B. in diesem Beispiel ein Parent-Theme überschreibt, das auf dem init-Hook aufgerufen wird:

1
<?php
2
function remove_parent_function(
3
    remove_action( 'init', 'parent_theme_function');
4
)
5
add_action( 'wp_loaded', 'remove_parent_function');
6
7
function child_theme_function(
8
    // contents of child theme function based on original parent theme function

9
)
10
add_action( 'init', 'child_theme_function');
11
?>

Überschreiben von nicht pluggable Funktionen

Funktionen im Parent-Theme, die nicht pluggable sind, können nicht auf besondere Weise überschrieben werden. Sie müssten also die oben genannte Methode verwenden, die Funktion aus ihrem Aktions-Hook entfernen und dann eine neue Funktion auf denselben Aktions-Hook schreiben, der den neuen Code bereitstellt.

Geben Sie der Funktion in Ihrem Child-Theme nicht den gleichen Namen wie die Funktion aus dem Parent-Theme, da dies Ihre Website brechen wird!

So erweitern Sie die Parent-Theme-Funktionen

Funktionen sind in der Regel nicht erweiterbar. Es kann jedoch eine Ausnahme geben, wenn Ihre Funktion Aufrufe anderer pluggable Funktionen enthält.

Ist dies der Fall, können Sie die Funktion erweitern, indem Sie die Funktionen innerhalb der Hauptfunktion überschreiben, ohne die gesamte Hauptfunktion ersetzen zu müssen.

In den meisten Fällen können Sie eine Funktion des Parent-Themes nur auf eine von drei Arten erweitern:

  • Wenn die Funktion, die Sie erweitern möchten, pluggable ist, kopieren Sie sie in Ihr Child-Theme, und fügen Sie zusätzlichen Code hinzu, um sie zu erweitern.
  • Wenn die Funktion nicht pluggable ist, entfernen Sie sie mit remove_action() aus ihrem Hook und schreiben Sie eine neue Funktion (mit einem anderen Namen) auf denselben Hook mit zusätzlichem Code. Sie können Code aus der ursprünglichen Funktion in Ihre neue Funktion kopieren und bearbeiten.
  • Schreiben Sie eine zweite Funktion, die auf demselben Hook wie die erste Funktion aufgerufen wird, und fügt zusätzlichen Code hinzu, der vor oder nach der ersten Funktion ausgeführt wird. Verwenden Sie den Prioritätsparameter in add_action(), um anzugeben, ob die zweite Funktion vor oder nach der ursprünglichen Funktion ausgeführt wird.

Zusammenfassung

Das Überschreiben von Funktionen in einem Parent-Theme ist komplizierter als das Überschreiben von Vorlagendateien oder das Styling, aber es kann getan werden. Hier habe ich Ihnen drei Methoden gezeigt, um dies zu tun:

  • Wenn Sie Ihr eigenes Parent-Theme schreiben oder ein Design mit ihnen verwenden, verwenden Sie pluggable Funktionen, damit eine Funktion im Child-Theme mit demselben Namen wie eine im Parent-Theme diese ersetzen wird.
  • Weisen Sie Funktionen in Ihren Child-Theme höhere Prioritäten zu, um sicherzustellen, dass sie nach denen im Parent-Theme ausgeführt werden.
  • Verwenden Sie remove_action() oder remove_filter(), um Funktionen im Parent-Theme vollständig zu entfernen.

Welche Methode Sie verwenden, hängt davon ab, wie Ihr Parent-Theme programmiert wurde und ob Sie die Funktion des Parent-Themes vollständig entfernen oder einfach eine andere Funktion ausführen müssen, um sie zu überschreiben.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.