ترحيل بيانات مخصص من WordPress إلى discourse

لقد استخدمت نص Discourse وقمت بترحيل بيانات phpbb إلى Discourse، والآن قمت بنقل موقعي إلى WordPress وأحتاج إلى ترحيل بعض بيانات المستخدم. لقد قمت بإنشاء حقول مستخدم مخصصة في Discourse، واستخدمت هذا الخطاف “wpdc_sso_params” لترحيل بيانات الحقول المخصصة.
ولكن المشكلة هي أنه يقوم بمزامنة البيانات عند تسجيل دخول المستخدم. إذا لم يسجل بعض المستخدمين الدخول مرة أخرى أو كانت بيانات المستخدمين منتهية الصلاحية، فلن يتم ترحيلها بهذه الطريقة.
هل هناك أي خطاف أو نص يمكنه ترحيل جميع بيانات المستخدمين دفعة واحدة؟

شيء آخر هو أننا نقوم بتعيين الحقول المخصصة، كيف يمكنني تعيين حقول الاسم الكامل والاسم الأول والأخير؟ مثلما يمكننا تعيين صور رمزية مخصصة باستخدام الخطاف “wpdc_sso_avatar_url”.

إذا كان المكون الإضافي WP Discourse نشطًا على موقع WordPress الخاص بك، فيمكنك كتابة نص برمجي يقوم بالتكرار عبر جميع مستخدمي موقعك واستدعاء الدالة sync_sso_record بمعلمات SSO لكل مستخدم تريد تحديثه:

https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L78

إنها دالة ثابتة، لذا تحتاج إلى استدعائها باستخدام:

WPDiscourse\\Utilities\\Utilities::sync_sso_record($sso_params_array, $wp_user_id)

لقد مر وقت طويل منذ أن حاولت القيام بذلك. اختبره مع مستخدم واحد قبل محاولة التكرار عبر جميع المستخدمين على الموقع.

يمكنك استخدام حقل Discourse external_name للاسم الكامل. سيصبح الاسم الذي تحدده بحقل external_name هو اسم المستخدم في Discourse. إذا كنت بحاجة إلى حقول منفصلة للاسم الأول والأخير، فسيتعين عليك إنشاء حقول مخصصة لها في Discourse.

أخبرني إذا واجهت أي مشكلة في ذلك. يمكنني محاولة اختباره غدًا.

إعجاب واحد (1)
$myusers = get_users( );
	$sso_params_array = [];
	$sso_params_array['custom.user_field_1'] = $user->user_login;
	$sso_params_array['custom.user_field_2'] = get_user_meta( $user->ID, 'first_name', true );
	$sso_params_array['custom.user_field_3'] = get_user_meta( $user->ID, 'last_name', true );
	foreach ( $myusers as $myuser ) {
		WPDiscourse\Utilities\PublicPluginUtilities::sync_sso_record($sso_params_array, $myuser->ID;);
	}

@simon هل أفعل ذلك بشكل صحيح؟

تحتاج إلى تعيين $sso_params_array داخل حلقة foreach. شيء مثل:

$myusers = get_users();
foreach ( $myusers as $myuser ) {
    $sso_params_array = [];
    $sso_params_array['custom.user_field_1'] = $myuser->user_login;
    $sso_params_array['custom.user_field_2'] = get_user_meta( $myuser->ID, 'first_name', true );
    $sso_params_array['custom.user_field_3'] = get_user_meta( $myuser->ID, 'last_name', true );

	WPDiscourse\Utilities\Utilities::sync_sso_record($sso_params_array, $myuser->ID;);
	}

جربها مع مستخدم واحد أولاً. على سبيل المثال:

$myuser = get_user_by('id', 1);

قد يكون من الأفضل إنشاء مستخدم اختبار لهذا. يمكنك الحصول على المستخدم باستخدام هذه الدالة: get_user_by() – Function | Developer.WordPress.org

3 إعجابات

@simon
هذا يعطيني خطأ فادح عند استخدام
WPDiscourse\Utilities\PublicPluginUtilities::sync_sso_record($sso_params_array, $myuser->ID);

PHP Fatal error: Uncaught Error: Call to undefined method WPDiscourse\Utilities\PublicPluginUtilities::sync_sso_record()

إضافة wp discourse نشطة وتسجيل الدخول الأحادي يعمل بشكل جيد.

لقد جربت
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
DiscourseUtilities::sync_sso_record($sso_params, 3992);

بهذه الطريقة لا يعطي خطأ فادح، ولكن بيانات الحقول المخصصة لا يتم حفظها في discourse.

يعيد هذا الخطأ
WP_Error Object ( [errors] => Array ( [wpdc_response_error] => Array ( [0] => An invalid response was returned from Discourse ) ) [error_data] => Array ( [wpdc_response_error] => Array ( [http_code] => 422 [http_body] => {“failed”:“FAILED”,“message”:“The external_id is required but was blank”} ) ) [additional_data:protected] => Array ( ) )

إعجاب واحد (1)

@simon هل يمكنك التحقق من المشكلة من فضلك

مرحباً محمد :slight_smile:

يقوم الجميع هنا ببذل قصارى جهدهم للمساعدة في حل المشكلات. سيمون يساعدك ويتم إخطاره تلقائيًا بالردود ما لم يقم بتعطيل الإشعارات.

لذلك، لا داعي لذكر اسمه (@mention) ورفع الموضوع، خاصة بعد الانتظار أقل من 3 ساعات فقط. يرجى التحلي بالصبر في هذا الصدد :slight_smile:

إعجابَين (2)

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

WPDiscourse\Utilities\Utilities::sync_sso_record($sso_params, 3992);

سأقوم بتعديل ذلك في منشوري السابق.

هذا هو الخطأ:

{“failed”:“FAILED”,“message”:“The external_id is required but was blank”}

تحتاج إلى تعيين المعلمة external_id في $sso_params_array. يجب تعيين external_id إلى معرف المستخدم في WordPress.

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