Mappa i campi utente personalizzati

Ciao, esiste un modo per mappare i campi utente di Discourse ai metadati degli utenti di WordPress?

Ho un modulo di registrazione in WordPress che salva i metadati; vorrei che questi venissero copiati in Discourse quando viene creato l’utente, per essere visualizzati nel profilo e, idealmente, per mostrare un compositore precompilato per la categoria “Introduzioni”.

Grazie

Penso di aver trovato come farlo, ma è necessario apportare modifiche al plugin WP Discourse dopo ogni aggiornamento:

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

Sarebbe ottimo se @simon potesse implementare questa funzionalità nelle impostazioni del plugin, ovvero semplicemente fornire un modo per mappare i nomi dei campi personalizzati da WP a Discourse.

Eviterei di apportare modifiche dirette al codice del plugin a meno che tu non sia assolutamente sicuro di ciò che stai facendo. Il plugin WP Discourse è progettato per essere esteso tramite un altro plugin o un tema utilizzando hook di azione. Questo ti permette di personalizzare il plugin senza apportare modifiche che verrebbero sovrascritte quando aggiorni il plugin.

Per aggiungere dati al payload SSO inviato a Discourse, utilizza il filtro wpdc_sso_params. Le funzioni che si agganciano a questo filtro ricevono due parametri: $params (un array di parametri SSO passati a Discourse) e $user (l’oggetto utente di WordPress).

Ecco un esempio su come utilizzare il filtro in questo post:

Fammi sapere se hai problemi a utilizzare il filtro per aggiungere i tuoi dati personalizzati sui campi utente.

Grazie! Esiste una documentazione con tutti gli hook che il plugin sta chiamando?
Grazie

No, ma dovrebbe esserci. Me ne occuperò a breve.

Devo scrivere un plugin per Discourse per leggere i parametri SSO e salvarli nei campi utente, oppure questa funzionalità è già implementata?

Puoi aggiornare i Campi Utente che hai creato su Discourse tramite SSO. Non è necessario alcun plugin. Per farlo, devi conoscere il nome che Discourse utilizza nel database per il campo personalizzato. Il metodo più semplice che conosco è accedere alla pagina Admin / Personalizza / Campi Utente e poi caricare la versione JSON della pagina. Ad esempio https://forum.example.com/admin/customize/user_fields.json

I dati JSON della pagina saranno simili a questo:

{
user_fields: [
{
id: 12,
name: "News Letter",
description: "Inviami una newsletter",
field_type: "confirm",
editable: false,
required: true,
show_on_profile: false,
show_on_user_card: false,
position: 3
},
{
id: 13,
name: "Company",
description: "Dove lavori?",
field_type: "text",
editable: true,
required: false,
show_on_profile: true,
show_on_user_card: true,
position: 4
}
]
}

I campi utente personalizzati sono denominati user_field_<field_id>. Ciò significa che il nome del campo “News Letter” del mio esempio JSON è user_field_12, mentre il nome del campo “Company” è user_field_13. Utilizza queste informazioni per aggiornare il payload SSO.

Ad esempio, con il filtro wpdc_sso_params che ho menzionato nel mio post precedente, il seguente codice aggiunto al file functions.php del tuo tema imposterà il campo “Company” di tutti gli utenti su “acme” quando accedono tramite SSO. Sostituisci my_namespace nel nome della funzione con uno spazio dei nomi unico per il tuo sito:

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

Per aggiungere campi basati sui dati degli utenti WordPress del tuo sito, utilizza il parametro $user della funzione per ottenere i dettagli sui tuoi utenti.

Funziona perfettamente, grazie ancora!