webentwicklung-frage-antwort-db.com.de

Eine Funktion in einem untergeordneten Thema neu deklarieren

Ich möchte eine Funktion neu deklarieren, die ich vom übergeordneten Thema geerbt habe.

Wenn ich es in functions.php mache, bekomme ich einen fatalen Fehler, dass eine Neudeklaration nicht möglich ist.

Ich habe eine Umgehung gemacht: Einen geänderten Funktionsnamen erstellen und alle Vorlagendateien, index.php usw. in das Verzeichnis des untergeordneten Themas kopieren und die Funktionsaufrufe neu schreiben. Nun heißt die neue Funktion.

Dies funktioniert, ignoriert jedoch alle Aktualisierungen, die das übergeordnete Thema hätte.

Gibt es eine bessere Lösung dafür?

4
Gergely

Das erneute Deklarieren einer Funktion in einem untergeordneten Design funktioniert nur, wenn die Funktion des übergeordneten Designs in a eingeschlossen ist

 if( !function_exists( 'function_name' )):

bedingung. Dann können Sie einfach die gesamte Funktion in das untergeordnete Thema kopieren und alle erforderlichen Änderungen vornehmen.

Wenn die Funktionen der übergeordneten Themen nicht in dieser if-bedingten Anweisung eingeschlossen sind und die Funktion keine Filter oder Hooks enthält, empfiehlt es sich, die Funktion in Ihr untergeordnetes Thema zu kopieren, diese Funktion umzubenennen, Ihre Änderungen vorzunehmen und dann Aktualisieren Sie Ihre Vorlagendateien entsprechend der neuen Funktion.

8
Pieter Goosen

Sie können die Funktion zunächst mit entfernen

remove_filter( 'hook', 'function_name' );

fügen Sie dann die Funktion erneut mit dem neuen Namen und demselben Hook hinzu.

Zum Beispiel

    function remove_content_filter() {

       remove_filter( 'the_content', 'function_name' );

    }

    add_action( 'after_setup_theme', 'remove_content_filter' );

    function new_function_name( $output ) {
        //some code here
        return $output;
    }

    add_filter( 'the_content', 'new_function_name' );
2
user3635808