はい、私がリンクしたトピックに不足していたのがまさにその例です。SSO ログインプロセスの一環として、add_groups SSO パラメータを使用してユーザーをグループに追加できます。デフォルトでは、WP Discourse プラグインは SSO ペイロードにこのパラメータを送信しませんが、このパラメータを SSO ペイロードに追加するために使用できるフィルタがプラグインに備わっています。
以下のコードを、お使いのテーマの functions.php ファイルまたはプラグインに追加すれば機能します。この方法で、複数のグループにユーザーを追加することも可能です。add_groups パラメータは、カンマ区切りのグループ名のリストを受け取ります(カンマの前後にスペースを入れないようにしてください)。
add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params' );
function wpdc_custom_sso_params( $params ) {
$params['add_groups'] = 'your_group_name';
return $params;
}
特定のユーザーのみをグループに追加したい場合は、以下のように関数を呼び出します。
add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
if (/*ユーザーをグループに追加するかどうかをチェックする条件をここに追加 */) {
$params['add_groups'] = 'your_group_name';
}
return $params;
}
また、remove_groups SSO パラメータを使用して、ユーザーをグループから削除することもできます。
add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params' );
function wpdc_custom_sso_params( $params ) {
$params['remove_groups'] = 'your_group_name';
return $params;
}
または
add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
if (/*ユーザーをグループから削除するかどうかをチェックする条件をここに追加 */) {
$params['remove_groups'] = 'your_group_name';
}
return $params;
}
このアプローチの主な欠点は、私がリンクした add_user_to_discourse_group 関数を使用する場合と比較して、既存のユーザーがグループメンバーシップを更新するには、Discourse からログアウトしてから再度ログインする必要があることです。