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' ); // prevent resizing of avatars
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 of the new avatar image
		);
		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 头像的功能。