サポート » プラグイン » Simple Membershipの会員ステータについて

  • sonicat0521

    (@sonicat0521)


    はじめまして。
    Wordpressを使って会員制のコンテンツを作ってみたくなり試行錯誤しているものです。
    会員制のサイトを作るにあたり「Simple Membership」を導入しました。

    設定などは済んでいる状態なのですが一点わからないことがあります。

    もともとwordpressにある権限グループ「ユーザー」という会員リストと
    Simple Membershipをインストールしたことで用意される「メンバー」という会員リストが存在しています。
    新規会員登録をすると双方に同じ会員が登録されていきます。
    双方のリストから登録内容を変更できるのですが、名前やメールアドレスなどの変更は同期されるのですが、会員レベル(権限グループ)が同期されません。

    もともとの仕様でそうなっているのか、こちらに不具合がでているのか、私には知識が足らず判断が難しいです。Simple Membership を利用されている方で検証できるかたはいらっしゃらないでしょうか。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • gblsm

    (@gblsm)

    もともとの仕様でそうなっているのだと思います。
    試すと @sonicat0521 さんと同じ結果になりました。
    会員レベルを追加する画面で「WordPress のデフォルトユーザー権限 (必須)」と書かれていることからの推測ですが、メンバーを新規登録するときだけ、新規登録されるユーザー(WordPress)にこの指定が効くのではないでしょうか。

    トピック投稿者 sonicat0521

    (@sonicat0521)

    @gblsmさん、ありがとうございます。

    そうですか・・やはりダメですか。

    名前やメールアドレスは同期しているのに、ステータスが同期していないのはなんとも残念です。何か良い方法はないでしょうか。。

    Simple Membership はpaypal決済を導入すると、ステータスを自動的に「無料会員」から「有料会員」へ変更できるらしいのですが、これも Simple Membershipをインストールしたことで用意される「メンバー」の方はステータスが変更になるが、wordpressに元からある権限グループ「ユーザー」側は変更にならない・・ということでしょうか。どなたかPaypalで有料会員を導入されていませんか?

    gblsm

    (@gblsm)

    名前やメールアドレスは同期しているのに、ステータスが同期していないのはなんとも残念です。何か良い方法はないでしょうか。。

    プラグイン Simple Membership のソースを読んでみました。
    アクション swpm_admin_end_edit_complete_user_data に自作関数をフックして、「登録内容が変更されたメンバーに対応する WordPress ユーザーの権限グループを変更する」のが良さそうです。

    ですが面倒なので、フックを使わずに、プラグインのソースへ直接コードを追加してみました。ちゃんとテストしていませんがとりあえず動いているようです。

    classes/class.swpm-admin-registration.php
    関数 public function edit_admin_end の中:

            if ($form->is_valid()) {
                $member = $form->get_sanitized_member_form_data();
                $plain_password = isset($member['plain_password']) ? $member['plain_password'] : "";
    // ここから
    $query = $wpdb->prepare("SELECT role FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $member['membership_level']);
    $member['role'] = $wpdb->get_var($query);
    // ここまで
                SwpmUtils::update_wp_user($user_name, $member);
                unset($member['plain_password']);
    // ここから
    unset($member['role']);
    // ここまで
                $wpdb->update($wpdb->prefix . "swpm_members_tbl", $member, array('member_id' => $id));
                // set previous membership level
                $member['prev_membership_level'] = $prev_level;
                 //Trigger action hook
                do_action('swpm_admin_end_edit_complete_user_data', $member);
    

    classes/class.swpm-utils.php
    関数 public static function update_wp_user の中:

            if (isset($swpm_data['plain_password'])) {
                $wp_user_info['user_pass'] = $swpm_data['plain_password'];
            }
    // ここから
    if (isset($swpm_data['role'])) {
        $wp_user_info['role'] = $swpm_data['role'];
    }
    // ここまで
            $wp_user = get_user_by('login', $wp_user_name);
    
            if ($wp_user) {
                $wp_user_info['ID'] = $wp_user->ID;
                return wp_update_user($wp_user_info);
            }
    
    トピック投稿者 sonicat0521

    (@sonicat0521)

    @gblsm さん、カスタマイズの方法までご指南いただき感謝いたします。
    2つのファイル、計3か所に追記して確認してみましたが、うまく連動しませんでした。

    一つ確認させてください。

    ちゃんとテストしていませんがとりあえず動いているようです。

    上記の件ですが、
    メンバーの会員レベルを変更の考え方ですが
    WP Membership > メンバー > ユーザーの「Edit」> 会員レベル を変更

    これを行うことでWordpressのユーザー側の権限グループが、上記で選んだものに変更される

    という認識ですが@gblsm さんのお考えと相違ないでしょうか?
    間違いなければ私の方の環境が問題ですよね。
    一応、メルアドや名前などは変更できていますが、権限(=会員レベル)がどうしても連動していない感じです。

    メンバーの会員レベルを変更の考え方ですが
    WP Membership > メンバー > ユーザーの「Edit」> 会員レベル を変更
    これを行うことでWordpressのユーザー側の権限グループが、上記で選んだものに変更される

    はい、そうです。テストはシングルサイトで行いました。

    1. Simple Membership の方で会員レベルを2つ作り、レベルA→WordPressの権限「購読者」、レベルB→「寄稿者」。
    2. Simple Membership の方で新規メンバーを作り、レベルAを選択。→WordPressのユーザーを見ると、新規登録されて購読者になっている。
    3. Simple Membership の方でユーザーのEdit→会員レベルをBに変更。→WordPressのユーザー一覧で見ると寄稿者に変わっている。

    それから Simple Membership の内部に、WordPress の権限グループを変更するための関数が用意されていましたが、なぜか使われていません。何か未解決の問題があるのかもしれません。
    classes/class.swpm-utils.php の中にある関数 public static function update_wp_user_Role ですが。

    トピック投稿者 sonicat0521

    (@sonicat0521)

    @gblsmさん、ありがとうございます。
    私の勘違いがありました。再度試したところ、ご指摘の方法で確かに同期しておりました。

    また私の説明不足もございました。申し訳ありません。
    勘違いというのは、現在の環境は
    Simple Membership と paypalではなくWoocommerceの決済で自動的に有料会員に変更できる「SWPM WooCommerce Addon」というプラグインを使っています。

    1)無料会員として上記でいうところの「レベルA(=購読者)」というレベルに登録してもらう

    2)「レベルB」になるために、その権利をWoocommerceを通して購入してもらう(SWPM WooCommerce Addon)

    3)「レベルA」の会員が、「レベルB」に自動的に変更になる

    ここまでは問題なく成功しています。

    ただSimple Membership の会員レベルはうまく「レベルB」になったのに、Woocommerceユーザーの方はなぜか変更になっていない「購読者」のまま・・という点で今回質問させていただきました。
    たしかに@gblsmさんの方法を使って手動で変更することには成功しましたが、上記の流れで自動的に変更できないでしょうか。paypalでの決済の場合はどうなのか気になるところです。、
    Woocommerceユーザー側の権限グループを変更したい場合は手動でやるというのが仕様なんですね(涙)

    SWPM WooCommerce Addon は有料プラグインなので残念ながら調べられません。最初に書いて頂きたかったですが……

    有料プラグインは調べらないので、代わりに PayPal の方を調べてみました。

    実際にテストしていませんが(PayPalアカウントを持っていないので)
    functions.php へ下記コードを追加すると
    支払い完了→会員レベル自動変更→WordPress権限グループ自動変更
    と動作する(はず)と思います。

    //	ipn/swpm_handle_subsc_ipn.php にある
    //	関数 swpm_handle_subsc_signup_stand_alone の中で
    //	支払いが確認できて会員レベルが自動変更された直後に
    //	アクション swpm_membership_changed が起動される。
    add_action( 'swpm_membership_changed', 'my_membership_changed' );
    function my_membership_changed( $param ) {
    	$user_name  = $param['member_info']['user_name'];	// ユーザー名
    	$from_level = $param['from_level'];	// 旧会員レベル
    	$to_level   = $param['to_level'];	// 新会員レベル
    	if ( $to_level == $from_level ) {
    		return;	// 同じなら何もしない
    	}
    
    	$wp_user = get_user_by( 'login', $user_name );
    	if ( $wp_user ) {	// ユーザーが登録されている
    		$wp_user_info = array();
    		$wp_user_info['ID'] = $wp_user->ID;	// ユーザーのID
    		// 会員レベルに設定されている権限グループを取得
    		global $wpdb;
    		$query = $wpdb->prepare( "SELECT role FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $to_level );
    		$wp_user_info['role'] = $wpdb->get_var( $query );	// 権限グループ
    		wp_update_user( $wp_user_info );	// ユーザーの権限グループを更新
    	}
    }
    

    なお、管理画面からメンバーの会員レベルを手動で変更したときにWordPressユーザーの権限グループを自動的に変える処理の方は、下記のアクションフック swpm_admin_end_edit_complete_user_data を使って可能でした(テスト済み)。処理の中身は上の方と良く似ています。

    //	管理画面でメンバーの情報を編集した直後に
    //	アクション swpm_admin_end_edit_complete_user_data が起動される。
    add_action( 'swpm_admin_end_edit_complete_user_data', 'my_update_wp_user_role' );
    function my_update_wp_user_role( $member ) {
    	$user_name  = $member['user_name'];	// ユーザー名
    	$from_level = $member['prev_membership_level'];	// 旧会員レベル
    	$to_level   = $member['membership_level'];	// 新会員レベル
    	if ( $to_level == $from_level ) {
    		return;	// 同じなら何もしない
    	}
    
    	$wp_user = get_user_by( 'login', $user_name );
    	if ( $wp_user ) {	// ユーザーが登録されている
    		$wp_user_info = array();
    		$wp_user_info['ID'] = $wp_user->ID;
    		// 会員レベルに設定されている権限グループを取得
    		global $wpdb;
    		$query = $wpdb->prepare( "SELECT role FROM " . $wpdb->prefix . "swpm_membership_tbl WHERE id = %d", $to_level );
    		$wp_user_info['role'] = $wpdb->get_var( $query );	// 権限グループ
    		wp_update_user( $wp_user_info );	// ユーザーの権限グループを更新
    	}
    }
    
    • この返信は5年、 12ヶ月前にgblsmが編集しました。
    • この返信は5年、 12ヶ月前にgblsmが編集しました。
8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「Simple Membershipの会員ステータについて」には新たに返信することはできません。