예외의 원인은 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 아바타로 설정할 수 있는 기능을 추가하는 것이 더 나은 방법일 수 있습니다.