¿Cuál es el problema con mi solicitud cURL?

A menos que esté haciendo algo mal, la solicitud a "/groups/${group_id}/members.json" es un tanto poco intuitiva. Tampoco parece estar documentada y no se puede ver en la pestaña de red del navegador al enviar el formulario “Añadir usuario” de Discourse en la página de un grupo. De nuevo, podría estar haciendo algo mal.

En cualquier caso, la ruta para la solicitud es /groups/${group_id}/members.json, con el ID numérico del grupo sustituido por group_id. El cuerpo de la solicitud requiere un parámetro group_id, pero ese parámetro debe establecerse en el name del grupo. Así que los argumentos quedan algo así:

$group_id = 45;
$group_name = 'publishers';
$args     = array(
    'method' => 'DELETE', // o 'PUT'
	'body'   => array(
		// 'group_id'  => $group_name, edit: este parámetro no es necesario, no estoy seguro de lo que estaba pasando cuando lo estaba probando.
		'usernames' => 'sally,Ben',
	)
);

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

Si tiene el plugin WP Discourse configurado en su sitio de WordPress, puede usar su función de ayuda estática discourse_request para evitar tener que usar curl. Tenga en cuenta que enlacé a la función estática que está en el archivo plugin-utilities, pero el espacio de nombres que necesita usar para las solicitudes externas es de 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' para añadir usuarios; 'DELETE' para eliminar usuarios
	$args     = array(
		'method' => $method,
		'body'   => array(
			// 'group_id'  => $group_name, edit: este parámetro no es necesario
			'usernames' => 'sally,Ben',
		)
	);
	$response = DiscourseUtilities::discourse_request( "/groups/${group_id}/members.json", $args );
    // devolver, registrar o manejar la respuesta
}

Si está utilizando WordPress como proveedor de SSO para Discourse, hay una función de ayuda que le permite añadir un usuario a uno o más grupos:

function zalg_sso_add_users_to_group() {
    $user_id = 1; // el ID de usuario de WordPress
    $group_names = 'foo,bar,baz'; // uno o más nombres de grupo separados por comas, ¡sin espacios después de las comas!
    DiscourseUtilities::add_user_to_discourse_group($user_id, $group_names);
}

Para añadir varios usuarios a un solo grupo, todavía necesitaría usar el método discourse_request que se encuentra en el primer ejemplo de código.

3 Me gusta