تعيين حقول المستخدم المخصصة

مرحبًا، هل توجد طريقة لربط حقول المستخدم في Discourse ببيانات تعريف المستخدم في ووردبريس؟

لدي نموذج تسجيل في ووردبريس يحفظ بيانات تعريفية، وأود أن يتم نسخ هذه البيانات إلى Discourse عند إنشاء المستخدم، ليتم عرضها في الملف الشخصي، ويفضل أن يُظهر محرر منشور مملوء مسبقًا لفئة “التعريفات”.

شكرًا لك

أعتقد أنني وجدت كيفية فعل ذلك، لكنه يحتاج إلى تعديل في إضافة WP Discourse بعد كل تحديث:

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

سيكون رائعًا لو قام @simon بتضمين هذه الميزة في إعدادات الإضافة، وذلك ببساطة عن طريق توفير طريقة لربط أسماء الحقول المخصصة من ووردبريس إلى ديسكورش.

لا أقترح إجراء أي تغييرات مباشرة على كود الإضافة ما لم تكن متأكدًا تمامًا مما تفعل. تم تصميم إضافة WP Discourse لتمكين توسيعها عبر إضافة أخرى أو قالب باستخدام خطافات الإجراء. وهذا يتيح لك تخصيص الإضافة دون إجراء تغييرات ستُستبدل عند تحديث الإضافة.

لإضافة بيانات إلى حمولة SSO المرسلة إلى Discourse، استخدم فلتر wpdc_sso_params. تمرر الدوال التي ترتبط بهذا الفلتر معلمتين: $params (مصفوفة من معلمات SSO المرسلة إلى Discourse) و $user (كائن المستخدم في WordPress).

يوجد مثال على كيفية استخدام الفلتر في هذا المنشور:

أخبرني إذا واجهت أي مشكلة في استخدام الفلتر لإضافة بيانات حقل المستخدم المخصصة الخاصة بك.

شكرًا لك! هل توجد أي توثيقات تحتوي على جميع الخطافات (hooks) التي يتم استدعاؤها في الإضافة؟
شكرًا لك

لا، لكن يجب أن تكون موجودة. سأقوم بتنظيم ذلك قريبًا.

أحتاج إلى كتابة إضافة لـ Discourse لقراءة معلمات SSO وحفظها في حقول المستخدم، أم أن هذه الوظيفة مُطبَّقة بالفعل؟

يمكنك تحديث حقول المستخدمين التي أنشأتها على Discourse عبر SSO. لا يتطلب ذلك إضافة خارجية. للقيام بذلك، تحتاج إلى معرفة الاسم الذي يستخدمه Discourse في قاعدة البيانات للحقل المخصص. أسهل طريقة أعرفها للقيام بذلك هي الذهاب إلى صفحة Admin / Customize / User Fields ثم تحميل النسخة 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>. هذا يعني أن اسم حقل “News Letter” من مثال JSON الخاص بي هو user_field_12، واسم حقل “Company” هو user_field_13. استخدم هذه المعلومات لتحديث حمولة SSO.

كمثال، باستخدام فلتر wpdc_sso_params الذي ذكرته في منشوري السابق، الكود التالي المضاف إلى ملف functions.php الخاص بسمتك سيُعدّ حقل “Company” لجميع المستخدمين إلى “acme” عند تسجيل دخولهم عبر SSO. استبدل 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 في الدالة للحصول على تفاصيل حول مستخدميك.

يعمل بشكل مثالي، شكرًا لك مرة أخرى!