it-swarm.com.de

Entfernen Sie die Aktion innerhalb einer Klasse in einem übergeordneten Thema aus dem untergeordneten Thema

Ich möchte meinem untergeordneten Thema Code hinzufügen, um eine im übergeordneten Thema festgelegte Aktion zu entfernen.

Die Aktion ist:

add_action( 'woocommerce_product_options_inventory_product_data', array( 'Electro_WC_Helper', 'product_options_inventory_product_data' ) );

Es befindet sich in einer Klasse 'Electro_WC_Helper'.

Ich habe versucht:

remove_action( 'woocommerce_product_options_inventory_product_data', array( 'Electro_WC_Helper', 'product_options_inventory_product_data' ), 99 );

Das hat nicht funktioniert, also dachte ich, das liegt wahrscheinlich daran, dass die untergeordneten Funktionen vor den übergeordneten ausgelöst werden. Deshalb habe ich Folgendes hinzugefügt:

add_action( 'admin_head', 'test_function', 99 );

function test_function() {

    echo 'test543';

    remove_action( 'woocommerce_product_options_inventory_product_data', array( Electro_WC_Helper, 'product_options_inventory_product_data' ), 99 );

}

Was auch nicht funktioniert.

Wie entferne ich die Aktion?

1
Steveo

Um eine Aktion oder einen Filter zu entfernen, müssen der Funktions-/Methodenname und die Priorität mit der zuvor hinzugefügten Aktion/dem zuvor hinzugefügten Filter übereinstimmen. Die Aktion, die Sie entfernen möchten, wird mit der Priorität 10 (Standardwert) hinzugefügt, während Sie versuchen, die Aktion mit der Priorität 99 zu entfernen.

Versuche dies:

remove_action( 'woocommerce_product_options_inventory_product_data', array( 'Electro_WC_Helper', 'product_options_inventory_product_data' ) );
// It is the same that:
// remove_action( 'woocommerce_product_options_inventory_product_data', array( 'Electro_WC_Helper', 'product_options_inventory_product_data' ), 10 );

Außerdem wird die Datei functions.php aus dem untergeordneten Thema vor der Datei functions.php aus dem übergeordneten Thema geladen. Daher muss die Ausführung der Funktion remove_action() im untergeordneten Thema mithilfe eines Aktions-Hooks verzögert werden, da gewartet werden muss, bis das übergeordnete Thema hinzugefügt wird die Aktion, die wir entfernen möchten. admin_head ist eine Aktion, die nur auf der Administratorseite stattfindet und nicht mit Themen verknüpft ist. Sie wird daher nicht im Front-End ausgelöst. Sie sollten eine geeignete Aktion verwenden, die davon abhängt, wie genau das übergeordnete Thema das Aktionsereignis hinzufügt. Normalerweise sollten Sie after_setup_theme mit einer hohen Priorität verwenden:

add_action( 'after_setup_theme', 'cyb_remove_parent_theme_action', 0 );
function cyb_remove_parent_theme_action() {
    remove_action( 'woocommerce_product_options_inventory_product_data', array( 'Electro_WC_Helper', 'product_options_inventory_product_data' ) );
}
3
cybmeta