DiscourseConnect SSO force avatar update programatically

I have this all set up and working so if someone changes their avatar on my WordPress site and then logs out of the forum and logs in again, it updates the avatar on Discourse.

But people don’t know to log out, and that’s quite annoying, so I’d like to trigger it myself. I have a hook that fires when someone updates their avatar. What can I add for it to send the new avatar to Discourse directly?

Hey @Shauny. Which avatars plugin are you using to manage avatars, and how have you set up this?

I’m using Ultimate Member for the avatars, I’ve found the right hook which fires once a user uploads one, just need to then send it to Discourse.

Here’s the action:


add_action("um_after_upload_db_meta_profile_photo","um_custom_after_upload_profile_photo", 10, 1 );
function um_custom_after_upload_profile_photo( $user_id ){
    // do something
}

Great, so you want to do the following

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

add_action("um_after_upload_db_meta_profile_photo", "um_custom_after_upload_profile_photo", 10, 1 );
function um_custom_after_upload_profile_photo( $user_id ){
    $avatar_url = // Ultimate Member avatar URL
    $params = array(
        'external_id' => $user_id,
        'avatar_url' => $avatar_url,
        'avatar_force_update' => 'true'
     )
    DiscourseUtilities::sync_sso_record( $params, $user_id );
}

You’ll need to figure out the URL for the avatar on Wordpress (you’ll perhaps find this in the Ultimate Member documentation) and set that to the variable $avatar_url.

I had to add into the params

'external_id' => $user_id,

But other than that, it works. Thanks!

(However now I have the issue that the hook I was given is fired before the file is moved, so it gets the old avatar… but that’s not your fault :sweat_smile:)

1 Like

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