Como adiciono um campo ao perfil Usuários? Por exemplo, país, idade, etc.

21

Eu não sou muito bom com computadores / códigos, etc. Eu uso um plug-in que faz um formulário de registro muito importante e, nesse formulário, adicionei país, faixa etária, gênero e assim por diante. Clico na opção que adicionará o registrador ao usuário do wordpress. Mas quando eu tento, apenas o nome de usuário e o email são exibidos na seção Usuários no back-end. Existe uma maneira dos outros campos serem exibidos na seção de usuários?

Eu preciso deles para mostrar para usos estatísticos.

Chloe Aus
fonte
5
Por favor, tente nossa pesquisa. Você encontrará dezenas de exemplos.
fuxia

Respostas:

58

Você precisa usar os show_user_profile, edit_user_profile, personal_options_update, e edit_user_profile_updateganchos.

Você pode usar o código a seguir para adicionar campos adicionais na seção Usuário

Código para adicionar campos extras na seção Editar usuário:

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 salvar detalhes adicionais dos campos no banco de dados :

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'] );
}

Existem também várias postagens de blog disponíveis sobre o assunto que podem ser úteis:

Arpita Hunka
fonte
Bravo isso funciona muito bem.
AVEbrahimi
11
Isso não está armazenando dados dos meus campos extras no banco de dados. Sugestões, por favor? Valeu.
b_dubb 3/07
@b_dubb, Você pode compartilhar seu código? Então eu vou checar e avisar.
Arpita Hunka
Resolvi meu problema, mas obrigado por entrar em contato.
b_dubb
3

É melhor você usar get_user_meta(em vez de get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);
}
T.Todua
fonte
3

O plug-in Advanced Custom Fields Pro permitirá adicionar campos aos perfis de usuário sem nenhuma codificação.

squarecandy
fonte
3
Only the pro version
Eu sou a pessoa mais estúpida
Existem maneiras gratuitas de fazer isso com PHP.
Johan Pretorius
Sim - definitivamente é possível codificar isso em PHP sem ACF, se você preferir. Minha experiência é que são necessárias mais de 100 linhas de código e você precisa se preocupar com a verificação de não conformidade, escrevendo o HTML do formulário etc. Pode levar algumas horas de codificação versus 5 a 10 minutos de instalação no ACF. Provavelmente depende se você já estiver usando o ACF Pro em um projeto.
squarecandy 15/10