Hook wp_create_user
Sto utilizzando il plugin UserUltra Pro e ho bisogno di creare un custom post type dopo che l'utente si registra nel sito. Il plugin UserUltra usa wp_create_user()
che so essere un wrapper per wp_insert_user()
. Inoltre, so che 'user_register' è l'hook chiamato dopo wp_insert_user()
.
Nonostante questo, non riesco a creare un nuovo custom post type perché sembra che l'hook user_register
non venga chiamato. È possibile? Come posso gestirlo?

In realtà ci sono due azioni: Una quando il profilo viene aggiornato e una quando l'utente viene registrato.
# Si attiva immediatamente dopo l'aggiornamento di un utente esistente.
do_action( 'profile_update', $user_id, $old_user_data );
# Si attiva immediatamente dopo la registrazione di un nuovo utente.
do_action( 'user_register', $user_id );
Quindi, fintanto che il login dell'utente non è vuoto e il nome utente non esiste già, dovrebbe procedere. Osserva le clausole di return:
if ( empty( $user_login ) ) {
return new WP_Error('empty_user_login', __('Non è possibile creare un utente con un nome di login vuoto.') );
}
if ( ! $update && username_exists( $user_login ) ) {
return new WP_Error( 'existing_user_login', __( 'Spiacenti, questo nome utente esiste già!' ) );
}
Ciò significa che se non ricevi un oggetto WP_Error
in risposta, dovrebbe eseguirsi. Puoi provare i numerosi filtri all'interno della funzione core per restringere il punto in cui le cose si interrompono se il tuo hook non viene eseguito. Quello che viene eseguito prima del return dell'errore, è il seguente:
apply_filters( 'pre_user_login', $sanitized_user_login );
Se questo funziona, allora il plugin semplicemente non sta verificando is_wp_error()
e ignora la chiamata di inserimento fallita.
<?php /** Plugin Name: Test se i filtri di wp_insert_user() funzionano */
add_filter( 'pre_user_login', function( $user )
{
var_dump( current_filter()." funziona correttamente" );
return $user;
} );
