Supporto » Sviluppare con WordPress » Come aggiungere campi personalizzati alle informazioni di contatto dell’utente

  • Ho trovato un codice interessante per aggiungere i campi che mi servono però i campi sono visibili solo da qui: /wp-admin/user-edit.php, invece a me servono da subito, cioè quando aggiungo un nuovo utente da wp-admin/user-new.php già ci devono essere, e ovviamente il contenuto che io metto deve restare inserito dopo che ho cliccato su “aggiungi nuovo utente”. Ecco il codice che ho usato (nel file functions.php)

    function extra_contact_info($contactmethods) {
       
      
        $contactmethods['phone'] = 'Telefono';
        $contactmethods['cell'] = 'Cellulare';
        $contactmethods['cell_two'] = 'Cellulare 2';
        $contactmethods['fax'] = 'Fax';
        $contactmethods['address'] = 'Indirizzo';
        $contactmethods['postalcode'] = 'Codice Postale';
        $contactmethods['town'] = 'Comune';
        $contactmethods['country'] = 'Paese';
        $contactmethods['taxcode'] = 'Codice fiscale';
    
        return $contactmethods;
    }
    add_filter('user_contactmethods', 'extra_contact_info');
    

    La pagina su cui ho bisogno di aiuto: [devi essere connesso per vedere il link]

Stai visualizzando 5 risposte - dal 1 al 5 (di 5 totali)
  • Ciao @sacconi,

    il filtro “user_contactmethods” purtroppo non viene eseguito nella pagina di creazione dell’utente.

    Per la creazione di un utente devi usare l’action user_new_form.

    Per la visualizzazione e la modifica di un utente invece le action show_user_profile e edit_user_profile.

    Poi devi gestire il salvataggio dei nuovi campi con altri hook.

    Per un esempio complessivo guarda questa risposta su Stack: https://wordpress.stackexchange.com/a/236679

    Ciao!

    Chi ha creato la discussione sacconi

    (@sacconi)

    ciao, le action di cui parli le ho già usate però per creare dei custom fields, che finiscono in fondo alla pagina del profilo, invece dovrebbero stare in alto tra le opzioni di contatto, o dovrei poter scegliere (come si fa a scegliere la posizione?); adesso ti mostro il codice che ho usato, ho due problemi importanti: 1) salvare il contenuto di quello che metto dentro già in user-new.php (adesso non è “sticky” , 2) solo il contenuto del campo phone viene salvato, e non invece quello del campo address,cosa manca? Ecco il codice:

    //aggiungere campi extra agli utenti
    
    add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
    add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );
    add_action( "user_new_form",'my_show_extra_profile_fields' );
    function my_show_extra_profile_fields( $user ) { ?>
    <h3>Extra profile information</h3>
        <table class="form-table">
    <tr>
                <th><label for="address">Indirizzo</label></th>
    <td>
                <input type="text" name="Indirizzo" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
                    <span class="description">Inserire l'indirizzo.</span>
                </td>
    <th><label for="phone">N.Telefono</label></th>
    
                <td>
                <input type="text" name="phone" id="phone" value="<?php echo esc_attr( get_the_author_meta( 'phone', $user->ID ) ); ?>" class="regular-text" /><br />
                    <span class="description">Inserire il numero di telefono.</span>
                </td>
    </tr>
    </table>
    <?php }
    
    //salvare i campi extra
    
    add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
    add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );
    
    function my_save_extra_profile_fields( $user_id ) {
    
    if ( !current_user_can( 'edit_user', $user_id ) )
        return false;
    
    update_usermeta( $user_id, 'phone', $_POST['phone'] );
    update_usermeta( $user_id, 'address', $_POST['address'] );
    }
    
    

    Ciao @sacconi,

    per quanto riguarda il posizionare i campi extra all’inizio, non saprei dirti, purtroppo gli hook prevedono un posizionamento alla fine. Non ho esperienza in merito e non so se c’è un modo di cambiare posizione.

    Il punto 1 non mi è chiaro, intendi che non salva i campi standard del profilo?

    Per il punto 2, credo che il problema sia sulla riga:

    <input type="text" name="Indirizzo" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />

    L’attributo “name” dovrebbe avere valore “address” e non “Indirizzo”, cioè lo stesso valore che usi nella riga

    update_usermeta( $user_id, 'address', $_POST['address'] );

    Chi ha creato la discussione sacconi

    (@sacconi)

    ok, risolto il punto 2. Però è andato a posto anche il punto n.1, cioè quando inserivo dati nei campi personalizzati non in fase di edit ma di registrazione nuovo utente non restavano dentro, ora ho provato e restano. Peccato che non c’è modi di avere dei nuovi campi in alto e già in fase di registrazione. Può essere raccomandabile a questo punto crearsi un custom post con custom fields piazzati in alto? Io volevo sfruttare il ruolo sottoscrittore per crearmi una tabella con le anagrafiche dei clienti, non so quale sia il metodo migliore…

    Il modo migliore dipende dall’uso che ne vuoi fare.

    L’anagrafica prevede che ciascun cliente abbia un account per accedere al sito?

    Se il fine è creare soltanto un elenco forse è meglio definire un custom post type (ad esempio “cliente”) ed assegnare dei campi custom. Ed eventualmente con opportune tassonomie puoi anche categorizzare i clienti.

    Questo avrebbe il vantaggio di poter gestire i clienti con la consueta interfaccia dei post e delle pagine, inoltre non andresti a creare account utente che, per quanto abbiano il ruolo più “basso”, sono comunuque un possibile punto di ingresso al sito.

Stai visualizzando 5 risposte - dal 1 al 5 (di 5 totali)
  • Devi essere collegato per rispondere a questo topic.