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' ) );
}
} );
Schreibe einen Kommentar