ما مشكلة طلب 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

إذا كان لديك المكون الإضافي WP Discourse مهيأً على موقع WordPress الخاص بك، يمكنك استخدام دالة المساعدة الثابتة discourse_request لتجنب الحاجة إلى استخدام curl. لاحظ أنني ربطت بالدالة الثابتة الموجودة في ملف plugin-utilities، ولكن النطاق الذي تحتاج إلى استخدامه للطلبات الخارجية هو من https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php.

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 الموجودة في المثال الأول من التعليمات البرمجية.

3 إعجابات