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

こんにちは、Discourse のユーザーフィールドを WordPress のユーザーメタデータにマッピングする方法はありますか?

WordPress 側でメタデータを保存する登録フォームを持っています。ユーザー作成時にそのデータが Discourse にコピーされ、プロフィールに表示されるようにしたいです。できれば、紹介カテゴリ用の投稿作成画面に事前に入力された状態で表示されるのが理想です。

よろしくお願いいたします。

「いいね!」 1

やり方は見つかったと思いますが、WP Discourse プラグインのアップデートのたびに修正が必要です:

https://meta.discourse.org/t/sso-settings-integration-between-wordpress-and-discourse-using-wp-plugin/49343/5

もし @simon さんがプラグインの設定にこの機能を追加してくだされば非常に助かります。具体的には、WP のカスタムフィールド名を Discourse にマッピングできるような仕組みがあればよいのです。

「いいね!」 1

何をしているか確信が持てない限り、プラグインのコードを直接変更しないことをお勧めします。WP Discourse プラグインは、プラグインやテーマによって拡張できるよう、アクションフック を利用して設計されています。これにより、プラグインの更新時に上書きされてしまう変更を加えずに、プラグインをカスタマイズできます。

Discourse に送信される SSO ペイロードにデータを追加するには、wpdc_sso_params フィルターを使用してください。このフィルターにフックする関数には、2 つのパラメータが渡されます。$params(Discourse に渡される SSO パラメータの配列)と $user(WordPress のユーザーオブジェクト)です。

このフィルターの使用方法の例は、以下の投稿にあります。

カスタムユーザーフィールドデータを追加するためにフィルターを使用する際に問題が発生した場合は、お知らせください。

「いいね!」 4

ありがとうございます!プラグイン内で呼び出しているすべてのフックに関するドキュメントはありますか?
ありがとうございます

いいえ、現時点ではありませんが、作成すべきです。近日中に整備いたします。

「いいね!」 1

Discourseプラグインを作成してSSOパラメータを読み取り、ユーザーフィールドに保存する必要がありますか?それとも、その機能はすでに実装されていますか?

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

完璧に動作します。再度ありがとうございます!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.