2015-05-12 53 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

這是正確的答案! –

相關問題