2017-09-27 5 views
2

私はこれまで、WooCommerceメンバーシッププラグインのアクションを削除するためのremove_action From PHP Classのソリューションを使用しました。remove_action WooCommerceメンバーシップのPHPクラスから

しかし、WooComemerceがメンバーシッププラグインの背後にあるコードを変更したため、ソリューションはもはや機能しません。

これは新しいコードです。

メインwoocommerce-memberships.php

public function includes() { 

    // load post types 
    require_once($this->get_plugin_path() . '/includes/class-wc-memberships-post-types.php'); 

    // load user messages helper 
    require_once($this->get_plugin_path() . '/includes/class-wc-memberships-user-messages.php'); 

    // load helper functions 
    require_once($this->get_plugin_path() . '/includes/functions/wc-memberships-functions.php'); 

    // init general classes 
    $this->rules   = $this->load_class('/includes/class-wc-memberships-rules.php',   'WC_Memberships_Rules'); 
    $this->plans   = $this->load_class('/includes/class-wc-memberships-membership-plans.php', 'WC_Memberships_Membership_Plans'); 
    $this->emails   = $this->load_class('/includes/class-wc-memberships-emails.php',   'WC_Memberships_Emails'); 
    $this->user_memberships = $this->load_class('/includes/class-wc-memberships-user-memberships.php', 'WC_Memberships_User_Memberships'); 
    $this->capabilities  = $this->load_class('/includes/class-wc-memberships-capabilities.php',  'WC_Memberships_Capabilities'); 
    $this->member_discounts = $this->load_class('/includes/class-wc-memberships-member-discounts.php', 'WC_Memberships_Member_Discounts'); 
    $this->restrictions  = $this->load_class('/includes/class-wc-memberships-restrictions.php',  'WC_Memberships_Restrictions'); 

メインインスタンス

function wc_memberships() { 
    return WC_Memberships::instance(); 
} 

含まクラス-WC-会員-restrictions.phpファイルから

/** 
* Returns the general content restrictions handler. 
* 
* @since 1.9.0 
* 
* @return null|\WC_Memberships_Posts_Restrictions 
*/ 
public function get_posts_restrictions_instance() { 

    if (! $this->posts_restrictions instanceof WC_Memberships_Posts_Restrictions) { 
     $this->posts_restrictions = wc_memberships()->load_class('/includes/frontend/class-wc-memberships-posts-restrictions.php', 'WC_Memberships_Posts_Restrictions'); 
    } 

    return $this->posts_restrictions; 
} 
クラス-WC-メンバーシップ・ポスト-restrictions.php i 'はthe_post' アクションを削除するにはどうすればよい

public function __construct() { 

    // decide whether attempting to access restricted content has to be redirected 
    add_action('wp', array($this, 'handle_restriction_modes')); 

    // restrict the post by filtering the post object and replacing the content with a message and maybe excerpt 
    add_action('the_post', array($this, 'restrict_post'), 0); 

で次に

?私に「空白のページ」-errorを与える

function weteach_remove_actions(){ 
     if(is_singular('post')) { 
     if(function_exists('wc_memberships')){ 
      remove_action('the_post', array(wc_memberships()->restrictions, 'restrict_post')); 
     } 
     } 
     return; 
    } 
    add_action('the_post', 'weteach_remove_actions', 1); 

は、これまでのところ私はのfunctions.phpのテーマファイルに次のように持っています。

+0

空白のページは、サイトのエラーを意味し、wp-configのWP_DEBUGをオンにして、取得したエラーを確認し、最初に修正します。 – davey

+0

こんにちは、anwserに感謝します。私はWP_DEBUGを有効にしましたが、まだ空白の画面が表示されています。私はまた、 "add_action( 'wp'、 'weteach_remove_actions'、1);"代わりにog "add_action( 'the_post'、 'weteach_remove_actions'、1);" –

+0

また、 'WP_DEBUG_LOG'をオンにして、エラーを' wp-content/debug.log'に記録してみてください。このコードでは主な 'woocommerce-memberships.php'ファイルの' get_restrictions_instance() 'が見つからなかったので、私は' post_restrictions'に正しくアクセスしていませんでした。私の編集を確認してください。 – helgatheviking

答えて

1

エラーメッセージの内容を教えてください。私の推測では、restrictionspost_restrictionsは同じプロパティではないため、適切なクラスのrestrict_postメソッドを見つけることができません。

編集は今、私はメンバーシップを見ていることが、これは私のために働くようだ:

function so_41431558_remove_membership_post_restrictions(){ 
    if(function_exists('wc_memberships') && version_compare(WC_Memberships::VERSION, '1.9.0', '>=') && is_singular('post')){ 
     remove_action('the_post', array(wc_memberships()->get_restrictions_instance()->get_posts_restrictions_instance(), 'restrict_post'), 0); 
    } 
} 
add_action('wp_head', 'so_41431558_remove_membership_post_restrictions', 1); 

あなたadd_action試みは後に機能が既にメンバーシップを実行しているで優先順位1、に起こっていますメソッドを優先度0に設定すると、残りのコードが正しい場合でも、それは遅すぎるでしょう。

だから、私は以前のフックに行く必要があると思う。

2.投稿制限クラスインスタンスにアクセスするには、新しいメソッドを使用する必要があると思います。私は直接のバージョンに切り替えた

と3を追加するように編集はget_posts_restrictions_instance()方法があった場所...それはwc_memberships()->get_restrictions_instance()->get_posts_restrictions_instance()

を介してアクセスされて、私は読み違える条件

と4を比較します

+0

こんにちはヘルゲベキュー、 ありがとうございました!それは動作します:-) 私は、このようにadd_actionに優先度1を追加する必要がありました: add_action( 'wp_head'、 'so_41431558_remove_membership_post_restrictions'、1);それが機能するためには –

関連する問題