Hook wp_create_user

16 set 2014, 14:10:28
Visualizzazioni: 21.2K
Voti: 2

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?

1
Commenti

che cosa stai cercando di fare?

Tomás Cot Tomás Cot
16 set 2014 14:56:54
Tutte le risposte alla domanda 1
0

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;
} );
16 set 2014 14:52:33