Non riesco ad aggiungere un utente al forum Discourse dal sito WordPress quando l'utente viene aggiunto a una membership

Ciao, ho un problema con il forum di Discourse che è https://community.over40connect.com/ che è collegato al mio sito web https://over40connect.com/staging/ utilizzando il plugin wp discourse e ho creato una funzione per aggiungere l’utente al gruppo di Discourse quando il ruolo dell’utente cambia, ma non sta aggiungendo quell’utente al gruppo di Discourse, ecco il codice

function add_user_to_discourse_group_on_role_change($user_id, $role) {
    // Controlla se il cambio di ruolo è rilevante per il tuo caso
    // Ad esempio, potresti voler eseguire questo solo se il nuovo ruolo è 's2member_level1'
    //if ($role === 's2member_level1') {
    // Imposta l'endpoint API di Discourse
    $discourse_endpoint = 'https://community.over40connect.com/groups/2/members.json';

    // Imposta i dati da inviare
    $data = array(
        'usernames' => array('haseebdeveloper'), // Il nome utente dell'utente WordPress da aggiungere
    );

    // Effettua la richiesta API
    $response = wp_remote_post($discourse_endpoint, array(
        'method'      => 'POST',
        'timeout'     => 45,
        'redirection' => 5,
        'httpversion' => '1.0',
        'blocking'    => true,
        'headers'     => array(
            'Content-Type' => 'application/json',
            'Api-Key'      => 'REDACTED', // Aggiungi qui la tua chiave API di Discourse
        ),
        'body'        => json_encode($data),
        'cookies'     => array(),
    ));

    // Controlla gli errori e gestisci la risposta
    if (!is_wp_error($response)) {
        $response_code = wp_remote_retrieve_response_code($response);

        if ($response_code === 200) {
            $response_body = wp_remote_retrieve_body($response);
            error_log('Discourse API Response: ' . $response_body); // Registra la risposta
            // Gestisci la risposta come necessario
        } else {
            error_log('Discourse API Error: Unexpected response code - ' . $response_code); // Registra l'errore
            // Gestisci l'errore
        }
    } else {
        $error_message = $response->get_error_message();
        error_log('Discourse API Error: ' . $error_message); // Registra l'errore
        // Gestisci l'errore
    }
    //}
}
1 Mi Piace

Ho oscurato quella che sembrava essere una vera chiave API dal tuo snippet di codice @Haseeb_Ahmed. Potresti voler revocare quella attuale e generarne una nuova. :+1:

4 Mi Piace

Visitando il tuo sito, penso che il tuo sito WordPress stia funzionando come provider di autenticazione DiscourseConnect per il tuo sito Discourse. Se è corretto, puoi usare la funzione di aiuto add_user_to_discourse_group per aggiungere utenti WordPress ai gruppi Discourse: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. I dettagli sull’uso della funzione sono qui:

Nota l’istruzione use all’inizio dell’esempio di codice:

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;

E come viene quindi utilizzata per chiamare la funzione (statica):

$result = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_name );
3 Mi Piace

Ciao @simon, ora ho usato solo questo codice

use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;

// Hook to execute when a user role changes
add_action('set_user_role', 'add_user_to_discourse_group_on_role_change', 10, 2);

function add_user_to_discourse_group_on_role_change($user_id, $role) {

   $group_names = array("volunteers", "moderators");
   $result = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_names );
    
}

ma non aggiunge ancora l’utente al gruppo discourse quando cambio il ruolo dell’utente.

Penso che dovrebbe essere una stringa separata da virgole, non un array:

2 Mi Piace

@Firepup650 ha ragione. Il parametro group_names deve essere impostato su una stringa. Se stai aggiungendo utenti a più gruppi, separa i nomi dei gruppi con una virgola (senza spazi dopo la virgola).

$group_names = "volunteers,moderators";

Se non funziona, o anche se funziona, prova a registrare il valore di $result per vedere cosa viene restituito.

3 Mi Piace

Ciao @Firepup650 grazie per il tuo aiuto, ecco il mio codice

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Hook to execute when a user role changes
add_action('set_user_role', 'add_user_to_discourse_group_on_role_change', 10, 2);

function add_user_to_discourse_group_on_role_change($user_id, $role) {


   $group_names = array("volunteers", "moderators");
	$group_names_string = implode(",", $group_names);

   $result = DiscourseUtilities::add_user_to_discourse_group( $user_id, $group_names_string );


}

sta aggiungendo l’utente al gruppo dei volontari ma non a quello dei moderatori, puoi dirmi qual è il problema?

1 Mi Piace

Non è possibile aggiungere utenti ai gruppi “moderatori”, “admin” o “staff” con questa chiamata di funzione. Tecnicamente, non è possibile aggiungere utenti a nessun gruppo “automatico” con questo approccio. È possibile aggiungere utenti solo a gruppi personalizzati che sono stati creati.

Modifica: se è necessario aggiungere utenti al gruppo dei moderatori, dare un’occhiata alla funzione sync_sso_record: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L70-L81. La funzione add_user_to_discourse_group è solo un wrapper di convenienza attorno a sync_sso_record.

moderator (boolean) è un argomento accettato per i parametri SSO: discourse/lib/discourse_connect_base.rb at 5098338a9649ee8830c8a0781e0eb538e8206eac · discourse/discourse · GitHub. È anche possibile aggiungere eventuali gruppi personalizzati a cui si desidera aggiungere utenti utilizzando il parametro add_groups. Ciò consentirebbe di aggiungere un utente al gruppo “moderatori” e al gruppo “Membri Volontari” con una singola chiamata API.

Modifica 2: se si prova l’approccio della funzione sync_sso_record, potrebbe essere necessario utilizzare la stringa "true" invece del booleano true per il parametro moderator. PHP interpreta true come 1. Credo che Discourse accetti la stringa "true" per gestire quel caso. Si noti che è possibile utilizzare la funzione get_sso_params per impostare i parametri SSO: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L129. C’è un esempio di come farlo nel codice della funzione add_user_to_discourse_group.

3 Mi Piace

Ciao @simon, puoi per favore darmi un esempio con codice di come dici di aggiungere un utente al gruppo dei moderatori?

Ecco l’idea di base. Presumo che dovrai aggiungere una condizione alla funzione in modo che non tutti gli utenti vengano aggiunti al gruppo dei moderatori quando il loro ruolo cambia.

function add_user_to_discourse_group_on_role_change( $user_id, $role ) {
	$sso_params = array(
		'external_id' => $user_id,
		'moderator'   => 'true', // i booleani 'true' e 'false' devono essere impostati come stringhe!
		'add_groups'  => 'volunteers' // elenco separato da virgole, senza spazi dopo le virgole
	);
    DiscourseUtilities::sync_sso_record( $sso_params );
}
1 Mi Piace

Ciao @simon, ho un problema. Ecco il codice che sto usando quando il ruolo di un utente cambia:

use WPDiscourse\Utilities\Utilities as DiscourseUtilities;

// Hook per eseguire quando un ruolo utente cambia
add_action('set_user_role', 'add_user_to_discourse_group_on_role_change', 10, 2);

function add_user_to_discourse_group_on_role_change($user_id, $role) {
// 	var_dump($role);
// 	die();
	  if ($role == 's2member_level1') {
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
// 	  	$group_names = array("haseeb-group", "moderators");
// 			$s2member_level_1_groups = implode(",", $group_names);
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
// 	  	var_dump($result);
// 	  	die();
		  	
// 			var_dump($result);
        }
		else if($role == 's2member_level2'){
			   $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
			  $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);
		}
		
		else if($role == 's2member_level3'){
			   $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
			  $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_3_groups);
		}
	
		
		else if($role == 's2member_level4'){
			   $s2member_level_4_groups = get_option('s2member_level_4_groups', '');
			  $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_4_groups);
		}
		
		else {
    // Raccogli tutti i gruppi di livello
    $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
    $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
    $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
    $s2member_level_4_groups = get_option('s2member_level_4_groups', '');

    // Combina tutti i gruppi in un unico array
    $s2member_level_groups = array_merge(
        explode(',', $s2member_level_1_groups),
        explode(',', $s2member_level_2_groups),
        explode(',', $s2member_level_3_groups),
        explode(',', $s2member_level_4_groups)
    );

    // Rimuovi duplicati
    $s2member_level_groups = array_unique($s2member_level_groups);

    // Rimuovi l'utente da tutti i gruppi raccolti
    foreach ($s2member_level_groups as $group) {
        $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
        // Puoi gestire $result come necessario
    }
}


    
}

Ora, lo scopo del codice è aggiungere o rimuovere un utente in base a una condizione, ma in qualsiasi caso o in qualsiasi condizione invia una notifica agli amministratori del forum che è necessario approvare, rifiutare o eliminare l’utente. Perché succede in ogni caso? Ad esempio, nel caso else voglio solo rimuovere l’utente da un gruppo specifico, ma in quel caso viene nuovamente inviata una notifica di revisione nuovo utente all’amministratore.

Un’altra cosa: quando un utente si registra sul sito WordPress, viene automaticamente aggiunto a questi gruppi trust_level_0 e trust_level_1, non so perché.

Per favore, aiutami. Posso anche condividere con te l’hook di registrazione dell’utente.

Ciò è dovuto al fatto che si tratta di gruppi di discussione principali, utilizzati per la gestione dei permessi e simili.

Ciò è dovuto al fatto che hai l’impostazione attiva per richiedere l’approvazione di tutto il nuovo personale utente, come menzionato nello screenshot:

immagine

Sembra che tu stia aggiungendo nuovi utenti, il che richiede l’approvazione, come ho menzionato sopra.

1 Mi Piace

Per aggiungere a quanto scritto da @Firepup650, quando il tuo codice chiama

DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);

sta chiamando una funzione di supporto che effettua una richiesta alla route sync_sso di Discourse: Sync DiscourseConnect user data with the sync_sso route. Tale richiesta viene utilizzata per aggiornare un utente esistente o per crearne uno nuovo. Se l’utente con $user_id non ha mai effettuato l’accesso al tuo sito Discourse, verrà creato un nuovo utente. Dovrebbe comunque essere aggiunto ai gruppi senza alcun problema, ma genererà una notifica per i moderatori perché il tuo sito ha abilitato l’impostazione del sito must approve users (gli utenti devono essere approvati):

1 Mi Piace

Ciao @simon, ho di nuovo un problema.

Voglio sincronizzare i dati dell’utente quando l’utente si registra sul sito web e viene aggiunto anche a Discourse, ma non sta sincronizzando le informazioni dei campi personalizzati nel suo profilo su Discourse. Ecco il mio codice, puoi controllarlo:

add_action( 'user_register', 'user_registered_callback', 10, 1 ); // Modificato per accettare un solo argomento

function user_registered_callback($user_id) {
    // Ottieni i dati dell'utente in base all'ID utente
    $user_data = get_userdata($user_id);

    // Verifica se i dati dell'utente esistono
    if ($user_data) {
        // Ottieni i ruoli dell'utente
        $roles = $user_data->roles;

        // Verifica se l'utente ha il ruolo s2Member
        if (in_array('s2member_level1', $roles)) {
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);

            // Ottieni i campi personalizzati
            $custom_fields = get_user_option('1709753088_wp_s2member_custom_fields', $user_id);
            // Prepara l'array dei parametri SSO
            $sso_params_array = [];
            $sso_params_array = [
				'external_id' => $user_id,
                'custom.user_interests' => $custom_fields['user_interests'],
                'custom.user_age' => $custom_fields['user_age'],
                'custom.user_gender' => $custom_fields['user_gender'],
                'custom.user_sexual' => $custom_fields['user_sexual'],
                'custom.user_facebook' => $custom_fields['user_facebook'],
                'custom.user_linkedin' => $custom_fields['user_linkedin'],
                'custom.users_reasons' => $custom_fields['users_reasons']
            ];

            $fields_updated = DiscourseUtilities::sync_sso_record($sso_params_array, $user_id);
			var_dump($fields_updated);
			die();
        } elseif (in_array('s2member_level2', $roles)) {
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);
        } elseif (in_array('s2member_level3', $roles)) {
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_3_groups);
        } elseif (in_array('s2member_level4', $roles)) {
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_4_groups);
        } else {
            // Raccogli tutti i gruppi di livello
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');

            // Combina tutti i gruppi in un unico array
            $s2member_level_groups = array_merge(
                explode(',', $s2member_level_1_groups),
                explode(',', $s2member_level_2_groups),
                explode(',', $s2member_level_3_groups),
                explode(',', $s2member_level_4_groups)
            );

            // Rimuovi i duplicati
            $s2member_level_groups = array_unique($s2member_level_groups);

            // Rimuovi l'utente da tutti i gruppi raccolti
            foreach ($s2member_level_groups as $group) {
                $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
                // Puoi gestire $result come necessario
            }
        }
    } else {
        // Gestisci i casi in cui i dati dell'utente non sono disponibili
        // Registra un messaggio o gestisci diversamente in base ai tuoi requisiti
        error_log("Dati utente non disponibili in user_registered_callback.");
    }
}

Ora puoi controllare questo codice:

  $sso_params_array = [
				'external_id' => $user_id,
                'custom.user_interests' => $custom_fields['user_interests'],
                'custom.user_age' => $custom_fields['user_age'],
                'custom.user_gender' => $custom_fields['user_gender'],
                'custom.user_sexual' => $custom_fields['user_sexual'],
                'custom.user_facebook' => $custom_fields['user_facebook'],
                'custom.user_linkedin' => $custom_fields['user_linkedin'],
                'custom.users_reasons' => $custom_fields['users_reasons']
            ];

Quando eseguo var_dump($fields_updated); restituisce true, ma non aggiunge dati al profilo utente su Discourse. Qual è il problema?

A meno che qualcosa non sia cambiato, è necessario utilizzare l’approccio delineato qui: Map custom User Fields - #7 by simon.

Innanzitutto, assicurati che i campi personalizzati esistano già su Discourse. Quindi, nella pagina /admin/customize/user_fields del tuo sito Discourse, aggiungi .json all’URL in modo da poter vedere il JSON del campo utente. Ad esempio http://localhost:4200/admin/customize/user_fields.json.

Utilizza i valori id dal JSON per impostare chiavi SSO che assomiglino a questo: custom.user_field_<field_id>. Ad esempio custom.user_field_1

Non posso testarlo in questo momento. Fammi sapere se funziona. Se non è già stato fatto, dovrebbe essere documentato nel suo argomento.

Ciao @simon, ho usato il tuo approccio che hai menzionato e questo è il mio codice ora

add_action( 'user_register', 'user_registered_callback', 10, 1 ); // Aggiustato per accettare un solo argomento

function user_registered_callback($user_id) {
    // Ottieni i dati dell'utente in base all'ID utente
    $user_data = get_userdata($user_id);
// 	$user = get_user_by( 'ID', $user_id );
    // Controlla se i dati dell'utente esistono
    if ($user_data) {
        // Ottieni i ruoli dell'utente
        $roles = $user_data->roles;

        // Controlla se l'utente ha il ruolo s2Member
        if (in_array('s2member_level1', $roles)) {
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_1_groups);
			 $sso_params = array();
//             // Ottieni campi personalizzati
//             $custom_fields = get_user_option('1709753088_wp_s2member_custom_fields', $user_id);
//             // Prepara l'array dei parametri SSO
//             $sso_params_array = [];
//             $sso_params_array = [
// 				'external_id' => $user_id,
//                 'custom.user_field_1' => $custom_fields['user_interests'],
//                 'custom.user_field_2' => $custom_fields['user_age'],
//                 'custom.user_field_3' => $custom_fields['user_gender'],
//                 'custom.user_field_4' => $custom_fields['user_sexual'],
//                 'custom.user_field_5' => $custom_fields['users_reasons']
//             ];

//             $fields_updated = DiscourseUtilities::sync_sso_record($sso_params_array);
			 $sso_params = apply_filters( 'wpdc_sso_params', $sso_params, $user_data );
			var_dump($sso_params);
			die();
        } elseif (in_array('s2member_level2', $roles)) {
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_2_groups);
        } elseif (in_array('s2member_level3', $roles)) {
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_3_groups);
        } elseif (in_array('s2member_level4', $roles)) {
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');
            $result = DiscourseUtilities::add_user_to_discourse_group($user_id, $s2member_level_4_groups);
        } else {
            // Raccogli tutti i gruppi di livello
            $s2member_level_1_groups = get_option('s2member_level_1_groups', '');
            $s2member_level_2_groups = get_option('s2member_level_2_groups', '');
            $s2member_level_3_groups = get_option('s2member_level_3_groups', '');
            $s2member_level_4_groups = get_option('s2member_level_4_groups', '');

            // Combina tutti i gruppi in un unico array
            $s2member_level_groups = array_merge(
                explode(',', $s2member_level_1_groups),
                explode(',', $s2member_level_2_groups),
                explode(',', $s2member_level_3_groups),
                explode(',', $s2member_level_4_groups)
            );

            // Rimuovi duplicati
            $s2member_level_groups = array_unique($s2member_level_groups);

            // Rimuovi l'utente da tutti i gruppi raccolti
            foreach ($s2member_level_groups as $group) {
                $result = DiscourseUtilities::remove_user_from_discourse_group($user_id, $group);
                // Puoi gestire $result come necessario
            }
        }
    } else {
        // Gestisci i casi in cui i dati dell'utente non sono disponibili
        // Registra un messaggio o gestisci diversamente in base ai tuoi requisiti
        error_log("Dati utente non disponibili in user_registered_callback.");
    }
}




add_filter( 'wpdc_sso_params', 'my_namespace_set_discourse_custom_field', 10, 2 );

function my_namespace_set_discourse_custom_field( $sso_params, $user ) {
    $custom_fields = get_user_option('1709753088_wp_s2member_custom_fields', $user->ID);
	
    // Controlla se $custom_fields è un array e non è vuoto
    if (is_array($custom_fields) && !empty($custom_fields)) {
        // Assegna i campi personalizzati alle rispettive chiavi nei parametri SSO
        $sso_params['custom.user_field_1'] = $custom_fields['user_interests'];
        $sso_params['custom.user_field_2'] = $custom_fields['user_age'];
        $sso_params['custom.user_field_3'] = $custom_fields['user_gender'];
        $sso_params['custom.user_field_4'] = $custom_fields['user_sexual'];
        $sso_params['custom.user_field_5'] = $custom_fields['users_reasons'];
    } else {
        // Registra o visualizza un messaggio di errore se $custom_fields non è nel formato previsto
        error_log('I dati dei campi personalizzati non sono nel formato previsto.');
    }

    // Restituisci i parametri SSO modificati
    return $sso_params;
}

Ora l’unico problema è che non sta aggiungendo users_reasons a custom.user_field_5 e sta aggiungendo altri dati al profilo utente, ad esempio se commento questa riga $sso_params[‘custom.user_field_5’] = $custom_fields[‘users_reasons’]; allora sta aggiungendo dati di altri campi in discourse e se non commento questa riga allora nessun dato viene aggiunto al profilo utente su discourse ora devo dire che il campo users_reasons sia sul sito discourse che sul sito wordpress è un campo a selezione multipla, quindi questo potrebbe essere il motivo? per favore dimmi

Sì, il problema è che si tratta di un campo multiselezionabile. Non sono sicuro se sia già supportato: Add support for multi-select fields in DiscourseConnect protocol.

Forse c’è un modo per farlo funzionare ora, ma non vedo come. Il codice di Discourse che viene chiamato si trova qui: discourse/app/models/discourse_connect.rb at main · discourse/discourse · GitHub

Ciao @simon, potresti per favore scrivere un esempio di codice secondo il mio codice con il riferimento che hai fornito:

Non credo sia possibile. Per quanto ne so, il codice per impostare campi personalizzati dal payload SSO è stato leggermente modificato rispetto a quando è stato scritto il post che ho linkato, ma non è stato modificato in un modo che consenta di aggiornare i campi multi-selezioni dal payload SSO.

Idealmente, Discourse gestirebbe il caso in modo simile a come gestisce il campo SSO add_groups: discourse/app/models/discourse_connect.rb at main · discourse/discourse · GitHub. Affinché ciò funzioni, il codice SSO di Discourse dovrebbe sapere se un particolare campo personalizzato era un campo multi-selezioni. Non credo che il codice abbia ora tali informazioni.

Di nuovo, potrebbe esserci un modo per farlo ora, ma va oltre le mie capacità.

Ciao @simon, voglio sincronizzare l’avatar dell’utente tra WordPress e Discourse. Dato che sto già usando il plugin WP Discourse per l’SSO, ora voglio che quando un utente cambia avatar sul sito web di Discourse, questo venga modificato anche sul sito web di WordPress. Come è possibile fare ciò? Voglio usare un plugin per avatar utente sul sito web di WordPress e questo è il codice che sto usando:

function my_wpdc_sso_client_updated_user( $updated_user, $query ) {
		$avatar_url = $query['avatar_url'];
		$user_id = $updated_user->ID;
		// questo ci permette di usare le funzioni download_url() e wp_handle_sideload()
	require_once( ABSPATH . 'wp-admin/includes/file.php' );

	// scarica nella directory temporanea
	$temp_file = download_url( $avatar_url );

	if( is_wp_error( $temp_file ) ) {
		return false;
	}

	// sposta il file temporaneo nella directory di caricamento
	$file = array(
		'name'     => basename( $image_url ),
		'type'     => mime_content_type( $temp_file ),
		'tmp_name' => $temp_file,
		'size'     => filesize( $temp_file ),
	);
	$sideload = wp_handle_sideload(
		$file,
		array(
			'test_form'   => false // non è necessario controllare il parametro 'action'
		)
	);

	if( ! empty( $sideload[ 'error' ] ) ) {
		// puoi restituire un messaggio di errore se vuoi
		return false;
	}

	// è ora di aggiungere la nostra immagine caricata alla libreria multimediale di WordPress
	$attachment_id = wp_insert_attachment(
		array(
			'guid'           => $sideload[ 'url' ],
			'post_mime_type' => $sideload[ 'type' ],
			'post_title'     => basename( $sideload[ 'file' ] ),
			'post_content'   => '',
			'post_status'    => 'inherit',
		),
		$sideload[ 'file' ]
	);

	if( is_wp_error( $attachment_id ) || ! $attachment_id ) {
		return false;
	}

	// aggiorna i metadati, rigenera le dimensioni dell'immagine
	require_once( ABSPATH . 'wp-admin/includes/image.php' );

	wp_update_attachment_metadata(
		$attachment_id,
		wp_generate_attachment_metadata( $attachment_id, $sideload[ 'file' ] )
	);

	// Restituisce l'ID dell'allegato
	update_user_meta($user_id, '1709753088_wp_user_avatar', $attachment_id);
	update_user_meta($user_id, 'wp_user_avatar', $attachment_id);
}

Come puoi vedere, voglio aggiornare le chiavi meta dell’utente usando l’ID dell’allegato, ma l’ID dell’allegato non viene creato.

Attendo un tuo riscontro.

Grazie