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

21

No soy muy bueno con las computadoras / códigos, etc. Utilizo un complemento que hace que el formulario de registro sea algo complicado y en ese formulario agregué país, grupo de edad, género, etc. Hago clic en la opción que agregará el registrador al usuario de WordPress. Pero cuando lo intento, solo se muestra el nombre de usuario y el correo electrónico en la sección Usuarios en el backend. ¿Hay alguna forma de que los otros campos se muestren en la sección usuarios?

Los necesito para mostrar para usos estadísticos.

Chloe Aus
fuente
55
Por favor intente nuestra búsqueda. Encontrará docenas de ejemplos.
fuxia

Respuestas:

58

Es necesario utilizar los show_user_profile, edit_user_profile, personal_options_update, y edit_user_profile_updateganchos.

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

Código para agregar campos adicionales 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("Extra profile information", "blank"); ?></h3>

    <table class="form-table">
    <tr>
        <th><label for="address"><?php _e("Address"); ?></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("Please enter your address."); ?></span>
        </td>
    </tr>
    <tr>
        <th><label for="city"><?php _e("City"); ?></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("Please enter your city."); ?></span>
        </td>
    </tr>
    <tr>
    <th><label for="postalcode"><?php _e("Postal Code"); ?></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("Please enter your postal code."); ?></span>
        </td>
    </tr>
    </table>
<?php }

Código para guardar detalles de campos adicionales 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 ( !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 varias publicaciones de blog disponibles sobre el tema que podrían ser útiles:

Arpita Hunka
fuente
Bravo, esto funciona muy bien.
AVEbrahimi
1
Esto no está almacenando datos de mis campos adicionales en la base de datos. Sugerencias por favor? Gracias.
b_dubb
@b_dubb, ¿puedes compartir tu código? Así que lo comprobaré y te lo haré saber.
Arpita Hunka
He resuelto mi problema pero gracias por contactarnos.
b_dubb
3

Será mejor que uses 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);
}
T.Todua
fuente
3

El complemento Advanced Custom Fields Pro le permitirá agregar campos a los perfiles de usuario sin ninguna codificación.

Squarecandy
fuente
3
Solo la versión profesional
soy la persona más estúpida el
Hay formas gratuitas de hacer esto con PHP.
Johan Pretorius
Sí, definitivamente es posible codificar esto en PHP sin ACF si lo prefiere. Mi experiencia es que se necesitan más de 100 líneas de código y debe preocuparse por la verificación de nonce, escribir el HTML del formulario, etc. Podría tomar algunas horas de codificación frente a 5-10 minutos de configuración en ACF. Probablemente depende de si ya está utilizando ACF Pro en un proyecto.
squarecandy