Mapear campos de usuario personalizados

Hola, ¿hay alguna manera de mapear los campos de usuario de Discourse a los metadatos de usuario de WordPress?

Tengo un formulario de registro en WordPress que guarda metadatos; me gustaría que se copien a Discourse al crear el usuario, para que se muestren en el perfil, y, idealmente, para que aparezca un editor prellenado en la categoría de Presentaciones.

Gracias

1 me gusta

Creo que he encontrado cómo hacerlo, pero hay que modificarlo en el plugin de WP Discourse después de cada actualización:

https://meta.discourse.org/t/sso-settings-integration-between-wordpress-and-discourse-using-wp-plugin/49343/5

Sería genial si @simon pudiera implementar esto en la configuración del plugin; básicamente, que exista una forma de mapear los nombres de los campos personalizados de WP a Discourse.

1 me gusta

No haría cambios directos en el código del plugin a menos que estés seguro de lo que estás haciendo. El plugin WP Discourse está diseñado para permitir que se extienda mediante otro plugin o un tema utilizando ganchos de acción. Esto te permite personalizar el plugin sin realizar cambios que se sobrescribirán al actualizarlo.

Para agregar datos al payload SSO que se envía a Discourse, utiliza el filtro wpdc_sso_params. Las funciones que se conectan a este filtro reciben dos parámetros: $params (un array de parámetros SSO que se pasan a Discourse) y $user (el objeto de usuario de WordPress).

Hay un ejemplo de cómo usar el filtro en esta publicación:

Avísame si tienes problemas al usar el filtro para agregar tus datos personalizados de campos de usuario.

4 Me gusta

¡Gracias! ¿Existe alguna documentación con todos los hooks que se están llamando en el plugin?
Gracias

No, pero debería haberla. Me encargaré de eso pronto.

1 me gusta

Necesito escribir un plugin de Discourse para leer los parámetros de SSO y guardarlos en los campos del usuario, o ¿esa funcionalidad ya está implementada?

Puedes actualizar los Campos de Usuario que hayas creado en Discourse a través de SSO. Esto no requiere un plugin. Para hacerlo, necesitas conocer el nombre que Discourse utiliza en la base de datos para el campo personalizado. La forma más sencilla que conozco es ir a la página Admin / Personalizar / Campos de Usuario y luego cargar la versión JSON de la página. Por ejemplo: https://forum.example.com/admin/customize/user_fields.json

Los datos JSON de la página se verán más o menos así:

{
user_fields: [
{
id: 12,
name: "News Letter",
description: "Send me a newsletter",
field_type: "confirm",
editable: false,
required: true,
present_on_profile: false,
present_on_user_card: false,
position: 3
},
{
id: 13,
name: "Company",
description: "Where do you work?",
field_type: "text",
editable: true,
required: false,
present_on_profile: true,
present_on_user_card: true,
position: 4
}
]
}

Los campos personalizados de usuario se nombran como user_field_<field_id>. Esto significa que el nombre del campo “News Letter” de mi ejemplo JSON es user_field_12, y el nombre del campo “Company” es user_field_13. Utiliza esta información para actualizar la carga útil de SSO.

Como ejemplo, con el filtro wpdc_sso_params que mencioné en mi publicación anterior, el siguiente código añadido al archivo functions.php de tu tema establecerá el campo “Company” de todos los usuarios en “acme” cuando inicien sesión mediante SSO. Reemplaza my_namespace en el nombre de la función con un namespace único para tu sitio:

add_filter( 'wpdc_sso_params', 'my_namespace_set_discourse_custom_field', 10, 2 );
function my_namespace_set_discourse_custom_field( $sso_params, $user ) {
	$sso_params['custom.user_field_13'] = 'acme';

	return $sso_params;
}

Para agregar campos basados en los datos de usuario de WordPress de tu sitio, utiliza el parámetro $user de la función para obtener detalles sobre tus usuarios.

3 Me gusta

Funciona perfectamente, ¡gracias de nuevo!

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