Actions oder Filter im Parent Theme „Kadence“ entfernen

801 5676
fotografiert von Gabriele Lässer

Derzeit verwende ich sehr gerne das Theme „Kadence“ von KadenceWP. Im Großen und Ganzen ist es flexibel genug, sodass ich selten Filter und Hooks bemühen muss, um zu überschreiben, was seitens des Themes vorgesehen ist.

Mit der WooCommerce-Erweiterug allerdings mischt sich das Theme doch etwas zu viel ein.

Eine Action die in einer Funktion definiert wurde zu entfernen geht leicht:

remove_action( 'any_wordpress_action', 'defined_function_to_remove' );

Wenn remove_action oder remove_filter aufgerufen werden, berechnet WordPress die Kennung des zu entfernenden Callbacks anhand der an diese Funktionen übergebene Priorität und Argumente. Entsprechend entfernt es registrierte Hooks für das jeweilige Tag.

Aus diesem Grund ist es am besten, remove_action / remove_filter genau die Argumente (Tag, Callback und Priorität) zu übergeben, die zum Hinzufügen des Hooks verwendet wurden, um sicher zu sein, dass das Entfernen erfolgreich ist.

add_action( 'any_wordpress_action', 'defined_function_to_remove' , 12); 

remove_action( 'any_wordpress_action', 'defined_function_to_remove' , 12);

Um eine Action loszuwerden, die innerhalb einer Klasse definiert wurde, geht man folgendermaßen vor:

remove_action( 'any_wordpress_action', array( 'name_der_klasse', 'defined_function_to_remove' ));

Etwas Schwieriger wird es allerdings, wenn Namespaces im Spiel sind. Hier gilt es, den Aufbau zu erforschen um herauszufinden, wie die Klassen innerhalb derer ein Hook oder eine Action definiert wurden, angesprochen werden können.

So war es mir mit einer störenden WooCommerce-Action im Kadence Theme ergangen, die ich mit folgender „Gegenaktion“ aufhob.

Kadence Theme

Hier gelangt man an die Klasse innerhalb derer sich der zu entfernende Filter oder Hook befindet über eine Instanz der 'Kadence\Theme' Klasse, genauer gesagt über die Klasse Theme innerhalb des Kadence Namespaces. Die Struktur für alle einbeziehenden Plugins ist immer gleich, so dass immer auf die gleiche Weise vorgegangen werden kann. Man braucht nur den Namen der Komponente ändern, die angesprochen werden soll, z.B. components['woocommerce'].

add_action( 'init', 'my_child_remove_parent_action' );
function my_child_remove_parent_action() {
  if ( class_exists( 'Kadence\Theme' ) ) {
        $parent_theme_class = Kadence\Theme::instance();
        remove_action( 'woocommerce_before_cart_table', array( $parent_theme_class->components['woocommerce'], 'cart_summary_title' ) );
    }
} );
add_action( 'init', function() {
  if ( class_exists( 'Kadence\Theme' ) ) {
        remove_action( 'woocommerce_before_cart_table', array( Kadence\Theme::instance()->components['woocommerce'], 'cart_summary_title' ) );
    }
} );

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable