2017-06-27 10 views
0

私は約1週間ほど頭を叩いていました。どんな助けでも大歓迎です。woocommerceのメンバーシップステータスを変更する

私は、ユーザーのメンバーシップステータス(キャンセル、アクティブなど)をPHPで更新できるようにするために、woocommerceストアを持っています。

私は私が彼らの現在の状態をつかむことができます知っている:

wc_memberships_get_user_membership($user_id, $membership_id); 

として新しいメンバーシップを作成します。

wc_memberships_create_user_membership($args); 

が、私はちょうどステータスを変更する方法を発見していません。

ありがとうございました!例では、「保留」状態とのいずれかのメンバーシップを取得するため

+0

すべてのユーザーのステータスを変更しますか?すぐに? – jjj

+0

いいえ、1人のメンバーシップで1人のユーザーのステータスを変更する必要があります。 – GeneralCan

答えて

0

さてさて、そう(彼らは何の助けませんでした:/)1ヶ月以上の周りに検索する、とWoocommerceのサポートチームと行ったり来たりした後、私はこの解決策を考え出した:データベースに泳い

私はすべてのメンバーシップが単なる投稿であり、IDと投稿者を持っていることに気付きました。だから私はそれを動作させるために少しSQLを書き上げることができると思った。

まず、あなたの関数内の$ wpdbを含めるする必要があります:

  global $wpdb; 

、あなたが入れビルトイン$wpdbクラス私は、データベースに直接フィールドを更新することができたWordPres年代を使用して

以下のクエリを一緒には、それは通常のSQLでどのように見えるか

 UPDATE ie_posts 
     SET post_status ='wcm-active' 
     WHERE post_parent = 49 AND post_author = 49870 

されており、ここでは、クラスを使用してのように見えているものです。

 $wpdb->update('ie_posts', 
      array('post_status' => $_status), 
      array('post_parent' => $_membership_id, 
        'post_author' => $_user_id) 
     ); 

これは、データベースの開発コピーを使用して何かを中断しないようにすることをお勧めします。

deffはそれを行うのに最も美しい方法ではありませんが、それは魅力のように機能します。もし誰かがそれを世話する良い方法があれば、私に知らせてください。

0

私は、この方法を試してみましょう:次に

$user_id = get_current_user_id(); 

$args = array( 
    'status' => 'pending' 
); 

$pending_memberships = wc_memberships_get_user_memberships($user_id, $args); 

と条件のチェックで、あなたは別のものに、この保留中のステータスを変更することができるはずです。

+0

ok、cool。あなたはどうやってそれを変えようとしていますか?それは私が立ち往生している部分です。 ユーザーに2つのメンバーシップがあり、そのステータスを変更する必要があるとします。 – GeneralCan

+0

私は同じ問題を抱えています。ステータスを変更するコマンドを見つけることができません。 – Stephen

+1

@Stephenはい、私の答えを見てください。それは汚いですが、それは動作します – GeneralCan

関連する問題