pmpro と wp-discourse で会員レベルを更新する

Discourse と PMPro の両方のプラグイン、さらに PMPro の Zappier アドオンを使用しています。ユーザーの会員レベルを更新しようとしています。
WP-Admin で任意のユーザーの会員レベルを変更すると、Discourse サイトの管理ユーザーセクションで更新されることを期待しています。
これを行うには何が必要でしょうか?アイデアを教えてください。

functions.php にアクションを追加する必要があります。

/* 例:http://hookr.io/actions/pmpro_after_change_membership_level/ を参照 */
do_action( 'pmpro_after_change_membership_level', $level_id, $user_id, $cancel_level );
function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {

 . . . . メンバーシップレベルとグループを取得し、それらをグループに追加する処理

}

更新されたユーザーの $level_id、$user_id、$cancel_level、およびグループ名を取得する方法について、詳しくご説明いただけますか?

ドキュメントにリンクしました。アクションフック経由で渡されると考えています。

こんにちは、Jay さん。返信ありがとうございます。私の環境でも動作しましたが、古い値がまだ残っています。つまり、新しい会員レベルと古い会員レベルの両方の値が表示されてしまいます。古い会員レベルの値を削除する方法について、何かアイデアはありますか?

私は以下を使用しています。

DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );

これが私の削除関数です。

function dcpmp_remove_member_from_group( $level_id, $user_id, $cancel_level ) {
    if ( ! empty( $cancel_level ) ) {
        $group_name = dcpmp_get_level_for_id( $cancel_level );
        if ( is_wp_error( $group_name ) ) {

            return null;
        }

        // ユーザーを削除します。
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $group_name );
        if ( ! empty( $result->success ) ) {
           // 会員レベルのメタデータキーを削除します。
            delete_user_meta( $user_id, "dcpmp_group_{$group_name}" );
        }

        return $result;
    }

    return null;
}

wp-discourse には、グループから削除する機能があると思います。それを呼び出すことができます。

これは Simon Cossarteam によって使用されているのと同じ関数です。以下のリンクをご覧ください。

Manage group membership in Discourse with WP Discourse SSO

私も同じ関数を使用していますが、助けが必要です。コードも上記のメッセージに投稿しました。
これが私のメンバーシップレベル更新コードです。

function action_pmpro_after_change_membership_level( $level_id, $user_id, $cancel_level ) {

		$group_name = dcpmp_get_level_for_id( $level_id );
		if ( is_wp_error( $group_name ) ) {

			return null;
		}
		$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );
	
		// ユーザーを削除します。
        $result = DiscourseUtilities::remove_user_from_discourse_group( $user_id, $groupname );
        if ( ! empty( $result->success ) ) {
           // メンバーシップレベルのメタデータキーを削除します。
            delete_user_meta( $user_id, "dcpmp_group_{$groupname}" );
        }
	    
        $result1 = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );

        if ( ! empty( $result1->success ) ) {

            // ユーザーがグループに追加された場合、後で使用できるメタデータのキー/値ペアを追加します。
            add_user_meta( $user_id, "dcpmp_group_{$group_name}", 1, true );
        }

        
return $result;
        return $result1;
	
}
add_action( 'pmpro_after_change_membership_level', 'action_pmpro_after_change_membership_level', 10, 3 );

コードのこの行が何をしているのかよくわかりません:

$groupname = DiscourseUtilities::get_discourse_user( $user_id, false );

これにより、$groupname が Discourse のユーザーオブジェクトに設定されます。この行を削除し、コードの最初の行で設定している $group_name 変数を使用する必要があると思います。

以前に使ったことがあるのですが、動作しません。
解決策をご教示ください。

ソリューションをご提供するには、お支払いが必要です。https://discourse.org/buy でホスティングプランに登録してください。