Was ist das Problem mit meiner cURL-Anfrage?

Wenn ich nichts falsch mache, ist die Anfrage an \"/groups/${group_id}/members.json\" irgendwie unintuitiv. Sie scheint auch nicht dokumentiert zu sein und kann nicht im Netzwerk-Tab des Browsers eingesehen werden, wenn das Discourse-Formular “Benutzer hinzufügen” auf der Gruppenseite abgeschickt wird. Auch hier könnte ich etwas falsch machen.

Auf jeden Fall ist der Pfad für die Anfrage /groups/${group_id}/members.json, wobei die numerische ID der Gruppe für group_id eingesetzt wird. Der Body der Anfrage benötigt einen group_id-Parameter, aber dieser Parameter muss auf den name der Gruppe gesetzt werden. Die Argumente sehen dann etwa so aus:

$group_id = 45;
$group_name = 'publishers';
$args     = array(
    'method' => 'DELETE', // oder 'PUT'
	'body'   => array(
		// 'group_id'  => $group_name, edit: dieser Parameter wird nicht benötigt, ich bin mir nicht sicher, was los war, als ich ihn getestet habe.
		'usernames' => 'sally,Ben',
	)
);

// Pfad:
/groups/${group_id}/members.json

Wenn Sie das WP Discourse-Plugin auf Ihrer WordPress-Site konfiguriert haben, können Sie seine statische discourse_request-Hilfsfunktion verwenden, um die Verwendung von curl zu vermeiden. Beachten Sie, dass ich auf die statische Funktion im plugin-utilities-File verlinkt habe, aber der Namespace, den Sie für externe Anfragen verwenden müssen, stammt von 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' zum Hinzufügen von Benutzern; 'DELETE' zum Entfernen von Benutzern
	$args     = array(
		'method' => $method,
		'body'   => array(
			// 'group_id'  => $group_name, edit: dieser Parameter wird nicht benötigt
			'usernames' => 'sally,Ben',
		)
	);
	$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
    // die Antwort zurückgeben, protokollieren oder verarbeiten
}

Wenn Sie WordPress als SSO-Provider für Discourse verwenden, gibt es eine Hilfsfunktion, mit der Sie einen Benutzer zu einer oder mehreren Gruppen hinzufügen können:

function zalg_sso_add_users_to_group() {
    $user_id = 1; // die WordPress-Benutzer-ID des Benutzers
    $group_names = 'foo,bar,baz'; // ein oder mehrere durch Kommas getrennte Gruppennamen, ohne Leerzeichen nach den Kommas!
    DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}

Um mehrere Benutzer zu einer einzigen Gruppe hinzuzufügen, müssten Sie immer noch die discourse_request-Methode verwenden, die im ersten Codebeispiel enthalten ist.

3 „Gefällt mir“