Ich glaube, die Ursache für die Ausnahme ist, dass Ihre Funktion my_wpdc_sso_client_updated_user das Array $updated_user nicht zurückgibt. Dieses Array wird für die Funktion benötigt, die den Filter wpdc_sso_client_updated_user hinzufügt, um fortzufahren.
Sie müssen auch die WordPress-Benutzer-ID des Benutzers im Aufruf von update_user_meta festlegen.
Dies funktioniert, deaktiviert jedoch die Skalierungsfunktionalität des Simple Local Avatars-Plugins:
add_filter( 'simple_local_avatars_dynamic_resize', '__return_false' ); // Verhindert die Größenänderung von Avataren
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 des neuen Avatarbildes
);
update_user_meta( $wp_user_id, 'simple_local_avatar', $avatar_data );
}
return $updated_user;
}
Der Grund für die Verhinderung der Größenänderung von Avataren ist, dass die Größenänderung mit dem Code des WordPress-Bildbearbeitungsprogramms erfolgt. Damit dies funktioniert, muss das Bild in WordPress heruntergeladen werden. Beachten Sie, dass, wenn Sie die Zeile add_filter( 'simple_local_avatars_dynamic_resize', '__return_false' ) aus dem obigen Code weglassen, das Simple Local Avatars-Plugin versucht, die Bilder zu skalieren, eine PHP-Warnung ausgibt und dann das Bild in voller Größe verwendet – sodass aus Benutzersicht nichts kaputt zu gehen scheint.
Ich bin mir bei der Kombination von Discourse-Avataren mit dem Simple Local Avatars-Plugin etwas unsicher. Das Problem, das ich sehe, ist, dass das Plugin Benutzern die Möglichkeit gibt, einen benutzerdefinierten Avatar auf WordPress hochzuladen. Wenn sie dies tun und sich dann wieder von Discourse bei WordPress anmelden, fragen sie sich vielleicht, was mit dem von ihnen hochgeladenen Avatar passiert ist. Es wäre komplexer zu entwickeln, aber es wäre vielleicht besser, die Möglichkeit hinzuzufügen, ihren Discourse-Avatar auf der WordPress-Profilseite des Benutzers bewusst als WordPress-Avatar festzulegen.