Принудительное обновление аватара в DiscourseConnect SSO программно

У меня всё настроено и работает: если кто-то меняет аватар на моём сайте WordPress, выходит из форума и заходит снова, аватар на Discourse обновляется.

Но пользователи не знают, что нужно выйти из системы, и это довольно раздражает, поэтому я хотел бы запускать это сам. У меня есть хук, который срабатывает при обновлении аватара. Что я могу добавить, чтобы отправлять новый аватар на Discourse напрямую?

Привет, @Shauny. Какой плагин для аватаров вы используете для управления аватарами и как вы это настроили?

Я использую плагин Ultimate Member для аватаров. Я нашел правильный хук, который срабатывает, когда пользователь загружает аватар, теперь нужно просто отправить его в Discourse.

Вот действие:

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 ){
    // выполнить действие
}

Отлично, значит, вы хотите сделать следующее

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 = // URL аватара Ultimate Member
    $params = array(
        'external_id' => $user_id,
        'avatar_url' => $avatar_url,
        'avatar_force_update' => 'true'
     )
    DiscourseUtilities::sync_sso_record( $params, $user_id );
}

Вам нужно будет определить URL аватара в WordPress (возможно, вы найдёте его в документации Ultimate Member) и присвоить его переменной $avatar_url.

Мне пришлось добавить в параметры:

'external_id' => $user_id,

Но в остальном всё работает. Спасибо!

(Однако теперь у меня возникла проблема: переданный мне хук срабатывает до перемещения файла, поэтому он получает старый аватар… но это не ваша вина :sweat_smile:)