カスタムユーザーフィールドのマッピング

Discourse で作成したユーザーフィールドを SSO を通じて更新できます。プラグインは不要です。これを行うには、Discourse がデータベース内でカスタムフィールドに使用している名前を知る必要があります。私が知る最も簡単な方法は、管理画面のカスタマイズ/ユーザーフィールドページに移動し、そのページの JSON バージョンを読み込むことです。例:https://forum.example.com/admin/customize/user_fields.json

ページの JSON データは、以下のような形式になります。

{
user_fields: [
{
id: 12,
name: "News Letter",
description: "Send me a newsletter",
field_type: "confirm",
editable: false,
required: true,
show_on_profile: false,
show_on_user_card: false,
position: 3
},
{
id: 13,
name: "Company",
description: "Where do you work?",
field_type: "text",
editable: true,
required: false,
show_on_profile: true,
show_on_user_card: true,
position: 4
}
]
}

ユーザーのカスタムフィールドは user_field_<field_id> という名前で参照されます。つまり、上記の JSON 例にある「News Letter」フィールドの名前は user_field_12、「Company」フィールドの名前は user_field_13 となります。この情報を使って SSO ペイロードを更新してください。

例として、前回の投稿で触れた wpdc_sso_params フィルターを使用し、テーマの functions.php ファイルに以下のコードを追加すると、SSO でログインしたすべてのユーザーの「Company」フィールドが「acme」に設定されます。関数名の my_namespace を、あなたのサイトに固有のネームスペースに置き換えてください。

add_filter( 'wpdc_sso_params', 'my_namespace_set_discourse_custom_field', 10, 2 );
function my_namespace_set_discourse_custom_field( $sso_params, $user ) {
	$sso_params['custom.user_field_13'] = 'acme';

	return $sso_params;
}

WordPress のユーザーデータに基づいたフィールドを追加する場合は、関数の $user パラメータを使用して、ユーザーの詳細を取得してください。

「いいね!」 3