wake-up-neo.com

Ist es möglich, eine Funktion eines übergeordneten Themas zu deaktivieren?

Ich habe mich gefragt, ob es möglich ist, eine Funktion, die im functions.php eines übergeordneten Themas aufgerufen wird, vollständig zu deaktivieren, und wenn ja, wie? (Natürlich ohne die Funktion zu löschen. Stattdessen fügen Sie etwas zum functions.php des untergeordneten Themas hinzu.)

4
Bram Vanroy

Nur unter bestimmten Umständen.

  1. Wenn die Funktionen des übergeordneten Themas in function_exists-Bedingungen eingeschlossen sind, sollten Sie sie ersetzen können. Zum Beispiel:

    // Parent
    if (!function_exists('p_wpse_95799')) {
      function p_wpse_95799() {
        // 
      }
    }
    

    Wenn das untergeordnete Design eine Funktion mit dem Namen p_wpse_95799 definiert, wird die übergeordnete Funktion nicht verwendet. Wenn dies eine Möglichkeit ist, müssen Sie nur eine Funktion definieren, die nichts tut, ähnlich wie oben.

  2. Wenn die Funktion mit einem Filter oder einer Aktion verknüpft ist, können Sie sie möglicherweise entfernen. Es gibt einen Haken. Das untergeordnete Thema functions.php wird zuerst geladen, was bedeutet, dass Sie möglicherweise nicht in der Lage sind, Filter zu entfernen direkt. Sie müssen sie einbinden, um ausgeführt zu werden, nachdem der functions.php der Eltern ausgeführt wurde. Andernfalls versuchen Sie, etwas zu entfernen, das nicht hinzugefügt wurde. Aus dem Codex: "Es ist auch erwähnenswert, dass Sie möglicherweise das Entfernen des Filters zu einem Haken priorisieren müssen, der nach dem Hinzufügen des Filters auftritt. Sie können den Filter nicht erfolgreich entfernen, bevor er hinzugefügt wurde." Meistens bedeutet dies, einen Hook zu finden, der nach dem übergeordneten functions.php ausgeführt wird, und sich an diesen zu haken, möglicherweise den dritten Parameter von add_action oder add_filter zu manipulieren, damit Ihre Funktion zu spät ausgeführt wird.

Das sind die Fälle, an die ich gerade denken kann. Vielleicht habe ich einen Fall vergessen. Ich vertraue darauf, dass jemand darauf hinweist, wenn ich :)

Es gibt keine PHP Ebene "remove function" und wenn Sie versuchen, zwei Funktionen mit demselben Namen zu definieren, wird eine Fehlermeldung angezeigt.

Da ich den Code für die Funktion, die Sie entfernen möchten, nicht sehe, mache ich mir Sorgen, dass Sie etwas beschädigen, indem Sie es entfernen oder ändern, falls dies überhaupt möglich ist. Ein bisschen Vorsicht ist angebracht.

8
s_ha_dum

Während es schwierig ist, genau zu wissen, wie man das macht, was man will, ohne Code zu sehen, kann dies helfen - Wie man Elternfunktionen in untergeordneten Themen überschreibt?

Ignorieren Sie einfach den Überschreibungsteil dieser Fragen und Antworten, wenn Sie nicht daran interessiert sind, die Funktion zu ändern, und konzentrieren Sie sich darauf, wie sie entfernt wird.

Grundsätzlich sollten Sie remove_action oder remove_filter in der function.php-Datei Ihres untergeordneten Themas verwenden und diese nach dem Einrichten des Themas ausführen.

0
Jared Sulzdorf