المشكلة هي أنني لا أتلقى أي خطأ أو تأكيد. يبدو أن cURL لا يعمل ببساطة. يمكنني رؤية أن مفتاح Discourse API قد تم استخدامه عند تنفيذ cURL، لذا هناك بعض النجاح، ولكن لم تتم إضافة المستخدم أو إزالته من المجموعة كما هو مقصود. يمكنني التأكيد على أن المتغيرات كلها صحيحة على الرغم من ذلك.
ما لم أكن أفعل شيئًا خاطئًا، فإن الطلب إلى " / groups / ${group_id} / members.json " غير بديهي إلى حد ما. ولا يبدو أنه موثق _ ولا يمكن عرضه في علامة تبويب الشبكة في المتصفح عند إرسال نموذج “إضافة مستخدم” في Discourse في صفحة المجموعة. مرة أخرى، قد أكون أفعل شيئًا خاطئًا.
على أي حال، المسار للطلب هو /groups/${group_id}/members.json، مع استبدال المعرف الرقمي للمجموعة بـ group_id. يتطلب جسم الطلب معلمة group_id، ولكن يجب تعيين هذه المعلمة إلى name المجموعة. لذا تصبح الوسائط شيئًا كهذا:
$group_id = 45;
$group_name = 'publishers';
$args = array(
'method' => 'DELETE', // أو 'PUT'
'body' => array(
// 'group_id' => $group_name, التعديل: هذه المعلمة ليست ضرورية، لست متأكدًا مما كان يحدث عندما كنت أختبرها.
'usernames' => 'sally,Ben',
)
);
// المسار:
/groups/${group_id}/members.json
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
function zalg_add_users_to_group() {
$group_id = 45;
$group_name = 'publishers';
$method = 'PUT'; // 'PUT' لإضافة المستخدمين؛ 'DELETE' لإزالة المستخدمين
$args = array(
'method' => $method,
'body' => array(
// 'group_id' => $group_name, التعديل: هذه المعلمة ليست ضرورية
'usernames' => 'sally,Ben',
)
);
$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
// إرجاع الاستجابة أو تسجيلها أو معالجتها
}
إذا كنت تستخدم WordPress كموفر SSO لـ Discourse، فهناك دالة مساعدة تسمح لك بإضافة مستخدم واحد إلى مجموعة واحدة أو أكثر:
function zalg_sso_add_users_to_group() {
$user_id = 1; // معرف مستخدم WordPress
$group_names = 'foo,bar,baz'; // اسم مجموعة واحدة أو أكثر مفصولة بفواصل، بدون مسافات بعد الفواصل!
DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}
لإضافة مستخدمين متعددين إلى مجموعة واحدة، ستحتاج إلى استخدام طريقة discourse_request الموجودة في المثال الأول من التعليمات البرمجية.
هذه مساعدة بطولية، شكراً سيمون! سيكون هذا أسهل بكثير إذا كان بإمكاني استخدام دوال مساعدة موجودة في إضافة WP Discourse. أنا أستخدم موقع ووردبريس الخاص بي لتسجيل الدخول الأحادي (SSO).
ومع ذلك، ما زلت أواجه خطأً فادحًا في حالتي عند تشغيل الدالة. لست متأكدًا من السبب. ما تقوله أعلى من فهمي قليلاً، ولكن إليك ما أستخدمه في ملف functions.php الخاص بي:
<?php
use WPDiscourse\Utilities\Utilities as DiscourseUtilities;
add_action('woocommerce_subscription_status_cancelled', 'zalg_sso_add_users_to_group', 10, 3);
function zalg_sso_add_users_to_group($subscription) {
$user_id = $subscription->get_user_id();
$group_names = 'premium';
DiscourseUtilities::remove_user_to_discourse_group($user_id, $group_names);
}
للتوسع في هذا، هل أنت على علم أين يمكنني العثور على دوال مساعدة لتعديل ملف تعريف المستخدم بشكل أكبر؟ سيكون من الرائع إذا كان بإمكاني تعيين صورة ملف تعريف المستخدم والسيرة الذاتية إذا كان ذلك ممكنًا.
لتحديث الصورة الرمزية، قم بتعيين حقل avatar_url في مصفوفة $sso_params وقم أيضًا بتعيين حقل avatar_force_update إلى 'true'.
هناك حقل bio يمكن استخدامه لتعيين السيرة الذاتية.
يقوم المكون الإضافي WP Discourse بالفعل بتعيين حقلي bio و avatar_url. كما أن لديه إعداد “Force Avatar Update” في إعدادات SSO الخاصة به. قد تكون المشكلة هي أن هذه الإعدادات يتم تحديثها فقط عندما يقوم المستخدم بتسجيل الدخول إلى Discourse عبر موقع WordPress. تقوم الدالة sync_sso_record بتحديث الحقول على الفور، دون الحاجة إلى قيام المستخدم بتسجيل الدخول إلى Discourse.