WordpressのアバターをDiscourseから取得(DiscourseがSSOプロバイダーの場合)

例外の原因は、function my_wpdc_sso_client_updated_user が $updated_user 配列を返していないことだと思います。この配列は、wpdc_sso_client_updated_user フィルターを追加する関数に必要です。

また、update_user_meta の呼び出しでユーザーのWordPressユーザーIDを設定する必要があります。

これは機能しますが、Simple Local Avatars プラグインのリサイズ機能を無効にします。

add_filter( 'simple_local_avatars_dynamic_resize', '__return_false' ); // アバターのリサイズを防止
add_filter( 'wpdc_sso_client_updated_user', 'my_wpdc_sso_client_updated_user', 10, 2 );
function my_wpdc_sso_client_updated_user( $updated_user, $query ) {
	if ( isset( $query['avatar_url'] ) ) {
		$new_avatar_url = $query['avatar_url'];
		$wp_user_id = $updated_user['ID'];

		$avatar_data = array(
			'full' => $new_avatar_url,  // 新しいアバター画像のURL
		);
		update_user_meta( $wp_user_id, 'simple_local_avatar', $avatar_data );
	}

	return $updated_user;
}

アバターのリサイズを防止する理由は、リサイズがWordPressの画像エディタコードで行われるためです。機能させるには、画像をWordPressにダウンロードする必要があります。上記のコードから add_filter( 'simple_local_avatars_dynamic_resize', '__return_false' ) の行を削除すると、Simple Local Avatars プラグインは画像をリサイズしようとし、PHPの警告が発生しますが、その後フルサイズの画像が使用されるため、ユーザーからは何も問題がないように見えることに注意してください。

DiscourseアバターとSimple Local Avatars プラグインの併用については、やや不確実です。問題は、このプラグインがWordPressでカスタムアバターをアップロードするオプションをユーザーに提供することです。もしユーザーがカスタムアバターをアップロードしてからDiscourseからWordPressに再度ログインした場合、アップロードしたアバターがどうなったのか疑問に思うかもしれません。開発はより複雑になりますが、ユーザーのWordPressプロフィールページでDiscourseアバターをWordPressアバターとして明示的に設定する機能を追加する方が良いかもしれません。