2015-05-12 31 views
0

我尝试使用remove_action从woocommerce中删除操作,但无法弄清楚如何操作。是否有可能从woocommerce中删除这些操作

首先,我试试这个:

global $wc_admin_profile; 

    remove_action('show_user_profile', array($wc_admin_profile, 'add_customer_meta_fields')); 
    remove_action('edit_user_profile', array($wc_admin_profile, 'add_customer_meta_fields')); 

,我也试试这个:

add_action('admin_init', 'wpdev_170663_remove_parent_theme_stuff', 0); 
function wpdev_170663_remove_parent_theme_stuff() { 
    global $wc_admin_profile; 

    remove_action('show_user_profile', array($wc_admin_profile, 'add_customer_meta_fields')); 
    remove_action('edit_user_profile', array($wc_admin_profile, 'add_customer_meta_fields')); 
} 

,但他们没有工作。

/** 
* WC_Admin_Profile Class 
*/ 
class WC_Admin_Profile { 
    /** 
    * Hook in tabs. 
    */ 
    public function __construct() { 
     add_action('show_user_profile', array($this, 'add_customer_meta_fields')); 
     add_action('edit_user_profile', array($this, 'add_customer_meta_fields')); 
     add_action('personal_options_update', array($this, 'save_customer_meta_fields')); 
     add_action('edit_user_profile_update', array($this, 'save_customer_meta_fields')); 
     add_action('show_user_profile', array($this, 'add_api_key_field')); 
     add_action('edit_user_profile', array($this, 'add_api_key_field')); 
     add_action('personal_options_update', array($this, 'generate_api_key')); 
     add_action('edit_user_profile_update', array($this, 'generate_api_key')); 
    } 

回答

0

如果没有溶液施用然后尝试

remove_all_actions($tag, $priority); 

它将删除操作

1

您可以通过重写WC_Admin_Profile Woocommerce核心类中删除这些行动。 你可以通过创建一个新的插件(创建新的php文件)并将其放入mu插件中。 该插件将包含的WC_Admin_Profile

定义现在你可以自由定义你自己的新创建的类中的代码。

我们知道mu-plugins目录中的插件在任何其他插件之前执行。因此,不要试图通过将代码放入您的活动主题目录中的functions.php中来解决它。 检查此计划Code execution order scheme 我面临同样的问题,我可以通过这样做来解决它。此解决方案100%工作,因为在class-wc-admin-profile.php其中/wp-content/plugins/woocommerce/includes/admin你有一个检查,其中验证是否已被定义类。

if (! class_exists('WC_Admin_Profile')) : 

,是因为你已经定义了自己的类,它永远不会从Woocommerce核心的类。我希望它有帮助:)

+1

这是正确的答案! –

相关问题