从子主题中删除父主题中的类中的操作

时间:2017-09-22 作者:Steveo

我想给我的子主题添加一些代码,以删除父主题中的动作集。

行动是:

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

它位于“Electro\\u WC\\u Helper”类中。

我尝试过:

remove_action( \'woocommerce_product_options_inventory_product_data\', array( \'Electro_WC_Helper\', \'product_options_inventory_product_data\' ), 99 );
这不起作用,所以我认为这可能是因为子函数在父函数之前启动,所以我添加了以下内容:

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 );

}
这也行不通。

如何删除该操作?

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

要删除操作或筛选器,函数/方法名称和优先级必须与先前添加的操作/筛选器匹配。要删除的操作的优先级为10 (默认值)尝试删除优先级为的操作时99.

尝试以下操作:

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 );
还有,功能。子主题中的php文件在函数之前加载。php文件的父主题,所以,执行remove_action() 子主题中的函数必须使用一些动作挂钩来延迟,因为它必须等到父主题添加我们要删除的动作。admin_head 是一个只发生在管理端且与主题无关的操作,因此它不会在前端触发。您应该使用适当的动作,这取决于父主题添加动作事件的准确程度;通常,您应该使用after_setup_theme 具有高优先级:

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\' ) );
}

结束

相关推荐

WordPress Themes and PHP unit

有没有将PHP单元测试与WordPress主题结合使用的例子,似乎很多关于这个主题的博客都过时了,因为核心单元测试是trac的一部分,然而昨天晚上,我拉了trac,试图设置一个示例主题来运行测试。它不能安静地工作,你必须运行所有的测试来测试你的主题,即使你尝试并需要一个文件-它试图在WordPress被实例化之前需要它,它会变得一团糟。无论如何,我知道有一个用于主题单元测试的插件,但它只是安装了大量“尝试”并破坏主题的帖子,并没有测试底层逻辑,尤其是在构建框架的情况下,php单元在这里是最好的,因为您可以