remove_action on after_setup_theme funktioniert nicht mit dem untergeordneten Thema

17

Ich versuche, eine Themenaktion für ein elegantes Thema mithilfe eines untergeordneten Themas zu entfernen. Dies funktioniert, wenn ich die Aktion nach dem add_action-Code an einer beliebigen Stelle in der übergeordneten Themafunktionen.php entferne. Es funktioniert jedoch nicht, wenn ich es aus der child theme functions.php hinzufüge.

remove_action ('after_setup_theme', 'et_pb_setup_theme' , 10);

Aktion entfernen hat die gleiche Priorität 10 wie die Aktion hinzufügen. Sollte es nicht funktionieren?

add_action( 'after_setup_theme', 'et_pb_setup_theme' ); //parent theme add_action
Rauchender Sheriff
quelle

Antworten:

25

Wie @cybmeta bereits betont hat, sind Sie mit Ihrer Entfernung zu früh. Sie müssen also die eigentliche Entfernung verschieben, zum Beispiel so:

add_action( 'after_setup_theme', 'wpdev_170663_remove_parent_theme_stuff', 0 );

function wpdev_170663_remove_parent_theme_stuff() {

    remove_action( 'after_setup_theme', 'et_pb_setup_theme' );
}
tfrommen
quelle
Hat funktioniert! Ich habe etwas ähnliches versucht, aber mein schlechtes! Da ich mit has_action eine Bedingung gesetzt habe , um eine noch nicht existierende Aktion in child functions.php zu überprüfen, funktionierte sie vor remove_action nicht !! Danke vielmals! function etn(){ if(has_action('after_setup_theme', 'et_pb_setup_theme')){ remove_action ('after_setup_theme', 'et_pb_setup_theme' ); } } add_action ('after_setup_theme', 'etn', 9);
Smoking Sheriff
3

Die Datei functions.php der untergeordneten Themen wird direkt vor der Datei functions.php des übergeordneten Themas geladen. Wenn Sie remove_actionalso ein untergeordnetes Thema ausführen , ist die Aktion, die Sie entfernen möchten, nicht vorhanden, da sie später hinzugefügt wird.

Cybmeta
quelle
1
..aber nicht Priorität 10 und der Hook after_setup_theme sollte sich darum kümmern? Wie soll ich das überhaupt machen?
Smoking Sheriff
Nein, das Prioritätsargument ist nicht dafür. Sie können einfach nichts entfernen, was nicht existiert. Mit anderen Worten, (aus dem Codex entnommen ) Sie können die Aktion nicht erfolgreich entfernen, bevor sie hinzugefügt wurde.
Cybmeta
1
Wie ist es also möglich, eine vom übergeordneten Thema festgelegte Aktion zu entfernen?
Aerendir
1

Versuchen Sie (ändern Sie einfach die Namen):

add_action( 'init' , 'myyy_remove' , 15 );
function myyy_remove() {
        remove_action('ACTION_NAME', 'my_function_name_Something'   ,11);
        remove_action('ACTION_NAME', 'my_function_name_Another'     ,11);
}
T.Todua
quelle