¿Cómo agregar un campo en el perfil de Usuarios? Por ejemplo, país, edad, etc.

16 ene 2016, 10:40:46
Vistas: 138K
Votos: 46

No soy muy bueno con las computadoras/códigos, etc. Uso un plugin que crea un formulario de registro y en ese formulario agregué país, grupo de edad, género y más. Seleccioné la opción que agregará al registrado en la sección de usuarios de WordPress. Pero cuando lo pruebo, solo el nombre de usuario y el correo electrónico aparecen en la sección de Usuarios en el backend.. ¿Hay alguna forma de que los otros campos se muestren en la sección de usuarios?

Necesito que se muestren para usos estadísticos.

1
Comentarios

+1 por la introducción - ¡puede que termine tomándola prestada! :-D

Boycott A.I. Boycott A.I.
12 nov 2024 21:02:50
Todas las respuestas a la pregunta 4
7
106

Necesitas usar los hooks show_user_profile, edit_user_profile, personal_options_update y edit_user_profile_update.

Puedes usar el siguiente código para agregar campos adicionales en la sección de Usuario

Código para agregar campos extra en la sección Editar Usuario:

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );

function extra_user_profile_fields( $user ) { ?>
    <h3><?php _e("Información adicional del perfil", "blank"); ?></h3>

    <table class="form-table">
    <tr>
        <th><label for="address"><?php _e("Dirección"); ?></label></th>
        <td>
            <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Por favor ingresa tu dirección."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="city"><?php _e("Ciudad"); ?></label></th>
        <td>
            <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Por favor ingresa tu ciudad."); ?></span>
        </td>
    </tr>
    <tr>
    <th><label for="postalcode"><?php _e("Código Postal"); ?></label></th>
        <td>
            <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Por favor ingresa tu código postal."); ?></span>
        </td>
    </tr>
    </table>
<?php }

Código para guardar los detalles de los campos extra en la base de datos:

add_action( 'personal_options_update', 'save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' );

function save_extra_user_profile_fields( $user_id ) {
    if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-user_' . $user_id ) ) {
        return;
    }
    
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    }
    update_user_meta( $user_id, 'address', $_POST['address'] );
    update_user_meta( $user_id, 'city', $_POST['city'] );
    update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );
}

También hay varios artículos disponibles sobre el tema que podrían ser útiles:

16 ene 2016 13:13:41
Comentarios

Bravo, esto funciona genial.

AVEbrahimi AVEbrahimi
15 mar 2018 15:31:25

Esto no está almacenando datos de mis campos adicionales en la BD. ¿Alguna sugerencia? Gracias.

b_dubb b_dubb
3 jul 2019 19:12:40

@b_dubb, ¿Podrías compartir tu código? Así lo revisaré y te haré saber.

Arpita Hunka Arpita Hunka
2 ago 2019 17:38:28

He resuelto mi problema pero gracias por contactarme.

b_dubb b_dubb
5 ago 2019 20:31:38

Deberías agregar verificación de nonce para evitar introducir vulnerabilidades de seguridad. https://developer.wordpress.org/themes/theme-security/using-nonces/

squarecandy squarecandy
30 ene 2020 20:26:41

He agregado la verificación de nonce.

KittMedia KittMedia
21 ene 2021 12:41:37

@KittMedia El nonce ya está verificado por check_admin_referer que es llamado desde user-edit.php antes de que se ejecuten estos hooks.

Rup Rup
21 ene 2021 13:00:57
Mostrar los 2 comentarios restantes
4
10

El plugin Advanced Custom Fields Pro te permitirá agregar campos a los perfiles de usuario sin necesidad de codificación.

20 sept 2017 06:33:52
Comentarios

Solo la versión pro

I am the Most Stupid Person I am the Most Stupid Person
4 mar 2019 14:16:43

Hay formas gratuitas de hacer esto con PHP.

Drmzindec Drmzindec
15 oct 2019 12:05:54

Sí, definitivamente es posible programar esto en PHP sin ACF si lo prefieres. Mi experiencia es que requiere más de 100 líneas de código y debes preocuparte por la verificación de nonce, escribir el HTML del formulario, etc. Podría tomar unas horas de codificación frente a 5-10 minutos de configuración en ACF. Probablemente depende de si ya estás usando ACF Pro en un proyecto.

squarecandy squarecandy
15 oct 2019 19:02:01

WordPress debería hacer esto sin pedirte que codifiques formularios HTML en PHP. Apoyo a ACF, debería ser parte del núcleo. También puedes definir campos con código y versionarlos.

marek.m marek.m
30 ene 2020 16:13:56
1

Sería mejor que utilices get_user_meta (en lugar de get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}
4 dic 2018 13:14:25
Comentarios

¡ambos funcionan sin problemas!

Fernando Baltazar Fernando Baltazar
18 ago 2020 22:04:25
2

También puedes agregar fácilmente campos adicionales a la sección existente "Información de contacto" en la pantalla de edición del perfil de usuario, y no requiere la configuración de otros hooks para actualizar los campos meta.

function custom_user_profile_contact_fields( $methods ) {
    $methods['phone'] = 'Número de teléfono';
    $methods['location'] = 'Ubicación';
    return $methods;
}
add_action( 'user_contactmethods', 'custom_user_profile_contact_fields' );
6 feb 2023 21:48:56
Comentarios

con mucho la respuesta más simple

RafaSashi RafaSashi
1 may 2023 12:19:29

@RafaSashi Puede ser, pero ten en cuenta que a veces se requieren campos más avanzados y este método solo funciona para usar campos de texto simples de una sola línea. ;)

Talk Nerdy To Me Talk Nerdy To Me
3 may 2023 18:36:36