Existe uma função auxiliar no arquivo Utilities para isso:
DiscourseUtilities::sync_sso_record( $sso_params );
Ontem postei um exemplo de como usá-la: I cannot add user to the discouse forum from a wordpress website when user added in a membership - #10 by simon. A parte complicada é criar o array para o argumento sso_params. Esse array deve conter o campo external_id. Ele é definido como o ID do WordPress do usuário:
$sso_params = array(
'external_id' => $user_id,
);
Você pode incluir quaisquer campos desta lista na carga útil: discourse/lib/discourse_connect_base.rb at 8f52fd1051e20fdff41321c5cff99fda05af86c1 · discourse/discourse · GitHub. Observe o array BOOLS que é mostrado logo abaixo da lista ACCESSORS que eu linkei. Ele indica quais das opções possíveis são booleans (true/false). Ao fazer requisições do WordPress, quaisquer campos booleanos devem ser definidos com as strings 'true' ou 'false', e não com os valores PHP true ou false.
Para atualizar o avatar, defina o campo avatar_url no array $sso_params e também defina o campo avatar_force_update como 'true'.
Existe um campo bio que pode ser usado para definir a bio.
O plugin WP Discourse já está definindo os campos bio e avatar_url. Ele também tem uma configuração “Force Avatar Update” em suas configurações de SSO. O problema pode ser que essas configurações só são atualizadas quando um usuário faz login no Discourse através do site WordPress. A função sync_sso_record atualiza os campos imediatamente, sem exigir que o usuário faça login no Discourse.
Além disso, se você está descobrindo que as bios dos usuários não estão sendo definidas no Discourse, pode ser que elas não estejam sendo definidas em seu site WordPress onde o plugin as espera: wp-discourse/lib/plugin-utilities.php at 99325e15190f3a705284dbf582f1c4b2c0b21492 · discourse/wp-discourse · GitHub. Se o Woocommerce tiver um campo diferente para bios, você pode acessar esse campo e usá-lo em uma chamada para sync_sso_record.