Mapear campos personalizados de usuário

Olá, existe alguma maneira de mapear campos de usuário do Discourse para metadados de usuário do WordPress?

Tenho um formulário de registro no WordPress que salva metadados. Gostaria que esses dados fossem copiados para o Discourse ao criar o usuário, para que apareçam no perfil e, idealmente, para que o compositor da categoria “Apresentações” já venha preenchido.

Obrigado.

Acho que descobri como fazer, mas precisa ser alterado no plugin WP Discourse após cada atualização:

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

Seria ótimo se @simon pudesse implementar isso nas configurações do plugin, basicamente criando uma maneira de mapear nomes de campos personalizados do WP para o Discourse.

Eu não faria alterações diretas no código do plugin, a menos que tenha certeza do que está fazendo. O plugin WP Discourse foi desenvolvido para permitir sua extensão por meio de um plugin ou tema, utilizando ganchos de ação. Isso permite personalizar o plugin sem fazer alterações que serão sobrescritas ao atualizá-lo.

Para adicionar dados ao payload SSO enviado ao Discourse, use o filtro wpdc_sso_params. As funções que se conectam a esse filtro recebem dois parâmetros: $params (um array de parâmetros SSO enviados ao Discourse) e $user (o objeto de usuário do WordPress).

Há um exemplo de como usar o filtro neste post:

Avise-me se tiver dificuldades ao usar o filtro para adicionar seus dados personalizados de campo de usuário.

Obrigado! Existe alguma documentação com todos os hooks que você está chamando no plugin?
Obrigado

Não, mas deveria existir. Vou resolver isso em breve.

Preciso criar um plugin do Discourse para ler os parâmetros SSO e salvá-los nos campos do usuário, ou essa funcionalidade já está implementada?

Você pode atualizar os Campos de Usuário que criou no Discourse via SSO. Isso não requer um plugin. Para fazer isso, você precisa saber o nome que o Discourse usa no banco de dados para o campo personalizado. A maneira mais fácil que conheço de fazer isso é acessar a página Admin / Personalizar / Campos de Usuário e, em seguida, carregar a versão JSON da página. Por exemplo: https://forum.exemplo.com/admin/customize/user_fields.json

Os dados JSON da página se parecerão com algo assim:

{
user_fields: [
{
id: 12,
name: "News Letter",
description: "Send me a newsletter",
field_type: "confirm",
editable: false,
required: true,
presentar no perfil: false,
presentar no cartão do usuário: false,
position: 3
},
{
id: 13,
name: "Company",
description: "Where do you work?",
field_type: "text",
editable: true,
required: false,
presentar no perfil: true,
presentar no cartão do usuário: true,
position: 4
}
]
}

Os campos personalizados do usuário são nomeados como user_field_<id_do_campo>. Isso significa que o nome do campo “News Letter” do meu exemplo JSON é user_field_12, e o nome do campo “Company” é user_field_13. Use essas informações para atualizar o payload do SSO.

Como exemplo, com o filtro wpdc_sso_params que mencionei em minha postagem anterior, o seguinte código adicionado ao arquivo functions.php do seu tema definirá o campo “Company” de todos os usuários como “acme” quando eles fizerem login via SSO. Substitua my_namespace no nome da função por um namespace exclusivo para seu 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;
}

Para adicionar campos baseados em dados de usuários do WordPress do seu site, use o parâmetro $user da função para obter detalhes sobre seus usuários.

Funciona perfeitamente, obrigado novamente!