Hinzufügen von Aktions-Hooks im übergeordneten Thema für eine einfachere Anpassung von untergeordneten Themen

Ich habe mich gefragt, warum nicht irgendjemand (habe nicht in der Lage einen zu finden) benutzerdefinierte Hooks am Anfang und am Ende der function.php des Themes zur Themenentwicklung hinzufügt.

Der Grund, warum ich das frage, ist, während ich ein untergeordnetes Thema mache, musste ich einige Standardeinstellungen wie Bildgrößen überschreiben, die in der Hauptfunktion php.php des Hauptthemas gesetzt wurden (nein !function_exists zum Überschreiben). Alles, was ich in die function.php meines Kindes schreibe, wird überschrieben.

Abgesehen von dem Hinzufügen des function_exists Wrappers, hatte ich die Lösung, die ich im Hinterkopf hatte, einfach eine do_action() am Anfang und am Ende der function.php hinzuzufügen. Aber ist das eine schlechte Übung? Wenn ja warum?

Ich bin nicht in der Lage, irgendwelche Antworten zu finden, oder jemand, der dies überall fragt.

Solutions Collecting From Web of "Hinzufügen von Aktions-Hooks im übergeordneten Thema für eine einfachere Anpassung von untergeordneten Themen"

Code in einer functions.php (oder jede Datei, die von dieser Datei geladen wird) sollte nicht automatisch ausgeführt werden, z. wenn die Datei enthalten ist. Der gesamte Code sollte an Hooks gebunden sein.
Das bedeutet, dass Sie im übergeordneten Thema keine spezielle Aktion benötigen. Das remove_action() Thema kann alle übergeordneten remove_action() mit remove_action() und remove_filter() .

Sie können dies jedoch für untergeordnete Design-Autoren einfacher machen, indem Sie eine benutzerdefinierte Aktion hinzufügen, nachdem Sie die Callbacks registriert haben.

Beispiel

Übergeordnetes Thema

 namespace ParentTheme; // register callbacks add_action( 'after_setup_theme', __NAMESPACE__ . '\setup_custom_background' ); add_action( 'after_setup_theme', __NAMESPACE__ . '\setup_custom_header' ); add_filter( 'body_class', __NAMESPACE__ . '\enhance_body_class' ); // provide an entry point do_action( 'parent_theme_loaded', __NAMESPACE__ ); 

Kind Thema

 add_action( 'parent_theme_loaded', function( $namespace ) { remove_action( 'after_setup_theme', $namespace . '\setup_custom_header' ); }); 

Siehe auch dieses ähnliche Beispiel für veraltete PHP-Versionen.


Wenn Ihr übergeordnetes Thema das Prinzip der Trennung von Problemen ignoriert und alles in nur einer oder zwei Setup-functionen mischt, verwenden Sie eine höhere Priorität und überschreiben Sie diese Aufrufe:

Übergeordnetes Thema

 add_action( 'after_setup_theme', 'some_setup_function' ); // priority = 10 

Kind Thema

 add_action( 'after_setup_theme', 'fix_theme_setup', 11 ); // priority = 11 function fix_theme_setup() { remove_theme_support( 'post-formats' ); // more changes here }