Cartographier les champs personnalisés de l'utilisateur

Bonjour, existe-t-il un moyen de mapper les champs utilisateur de Discourse aux métadonnées des utilisateurs de WordPress ?

J’ai un formulaire d’inscription dans WordPress qui enregistre des métadonnées. J’aimerais que ces données soient copiées dans Discourse lors de la création de l’utilisateur, afin qu’elles apparaissent dans le profil. Idéalement, cela permettrait également d’afficher un éditeur pré-rempli pour la catégorie « Présentations ».

Merci

1 « J'aime »

Je pense avoir trouvé comment faire, mais cela doit être modifié dans le plugin wp-discourse après chaque mise à jour :

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

Ce serait formidable si @simon pouvait intégrer cela dans les paramètres du plugin, en ajoutant simplement un moyen de mapper les noms des champs personnalisés de WP vers Discourse.

1 « J'aime »

Je ne recommanderais pas de modifier directement le code du plugin à moins d’être certain de ce que vous faites. Le plugin WP Discourse est conçu pour être étendu par un autre plugin ou un thème grâce aux hooks d’action. Cela vous permet de personnaliser le plugin sans effectuer de modifications qui seront écrasées lors de la mise à jour.

Pour ajouter des données au payload SSO envoyé à Discourse, utilisez le filtre wpdc_sso_params. Les fonctions qui s’hookent à ce filtre reçoivent deux paramètres : $params (un tableau de paramètres SSO transmis à Discourse) et $user (l’objet utilisateur WordPress).

Voici un exemple d’utilisation de ce filtre dans ce post :

N’hésitez pas à me faire savoir si vous rencontrez des difficultés pour utiliser ce filtre afin d’ajouter vos propres données de champ utilisateur personnalisées.

4 « J'aime »

Merci ! Existe-t-il une documentation listant tous les hooks que vous appelez dans le plugin ?
Merci

Non, mais il devrait y en avoir une. Je m’en occupe bientôt.

1 « J'aime »

Je dois écrire un plugin Discourse pour lire les paramètres SSO et les enregistrer dans les champs utilisateur, ou cette fonctionnalité est-elle déjà implémentée ?

Vous pouvez mettre à jour les champs utilisateur que vous avez créés sur Discourse via SSO. Cela ne nécessite aucun plugin. Pour ce faire, vous devez connaître le nom que Discourse utilise dans la base de données pour le champ personnalisé. La méthode la plus simple que je connaisse consiste à accéder à la page Admin / Personnaliser / Champs utilisateur, puis à charger la version JSON de cette page. Par exemple : https://forum.example.com/admin/customize/user_fields.json

Les données JSON de la page ressembleront à ceci :

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

Les champs personnalisés utilisateur sont nommés user_field_<field_id>. Cela signifie que le nom du champ « News Letter » de mon exemple JSON est user_field_12, et celui du champ « Company » est user_field_13. Utilisez ces informations pour mettre à jour la charge utile SSO.

Par exemple, avec le filtre wpdc_sso_params que j’ai mentionné dans mon message précédent, le code suivant ajouté au fichier functions.php de votre thème définira le champ « Company » de tous les utilisateurs à « acme » lorsqu’ils se connectent via SSO. Remplacez my_namespace dans le nom de la fonction par un espace de noms unique pour votre site :

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;
}

Pour ajouter des champs basés sur les données des utilisateurs WordPress de votre site, utilisez le paramètre $user de la fonction pour obtenir des détails sur vos utilisateurs.

3 « J'aime »

Ça fonctionne parfaitement, merci encore !

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