HostGator Promoção (728x60)

Adicionando Campos Extras ao Perfil do Usuário

adicionando campos extras ao perfil usuario

Quem precisa armazenar informações extras dos usuários pode adicionar novos campos ao perfil de usuários do WordPress. Esse recurso é muito útil para quem precisa, por exemplo, armazenar o endereço ou dados de contato do usuário ou colaborador do site. Veja dois modos distintos de adicionar novos campos, um simples e o outro mais avançado, que suporta até validação de dados.

Conforme dito anteriormente são dois modos diferentes de adicionar campos extras ao perfil de usuários. Você deve escolher o que mais se encaixa em suas necessidades. Caso não precise de recursos de validação, por exemplo, você pode usar o método mais simples. Não é preciso instalar plugins ou fazer configurações avançadas, mas é importante entender o funcionamento para fazer alterações no mesmo.

Método Simples

Vamos começar pelo método simples de adicionar novos campos ao perfil do usuário. Os novos campos são exibidos na tela de edição de perfil do usuário.

adicionando campos extras ao perfil do usuario

No arquivo functions.php do seu tema adicione o seguinte código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
** Adicionando novos campos ao perfil do usuario
** By wptotal.com.br
**/
function add_contact_methods($profile_fields) {
 
// Sintaxe $profile_fields['nome do campo'] = 'Descrição do campo';
$profile_fields['twitter'] = 'Twitter Username';
$profile_fields['facebook'] = 'Facebook URL';
$profile_fields['gplus'] = 'Google+ URL';
 
return $profile_fields;
}
add_filter('user_contactmethods', 'add_contact_methods');
/**
** Adicionando novos campos ao perfil do usuario
** By wptotal.com.br
**/
function add_contact_methods($profile_fields) {

// Sintaxe $profile_fields['nome do campo'] = 'Descrição do campo';
$profile_fields['twitter'] = 'Twitter Username';
$profile_fields['facebook'] = 'Facebook URL';
$profile_fields['gplus'] = 'Google+ URL';

return $profile_fields;
}
add_filter('user_contactmethods', 'add_contact_methods');

Ele vai adicionar os novos campos na seção “Informações de contato”. Não há muitas opções, você deve informar o nome do campo e a descrição do mesmo, conforme o código acima. Caso precise de algo mais avançado utilize o método abaixo em vez deste.

Método Avançado

Se o método simples de adicionar campos não atende as suas necessidades, poderá usar o método “avançado” para fazer isso. Ele permite inserir validações e muitas outras opções.

É possível inserir validações nos campos e exibir mensagens de erros. No exemplo abaixo coloquei o campo “Telefone” como obrigatório para mostrar como deve ser feito nestes casos.

adicionando avancados ao perfil do usuario

O código é divido em três partes, cada um com uma finalidade diferente, todos devem ser inseridos no arquivo functions.php do seu tema. Segue os códigos com a descrição de suas respectivas funcionalidades.

O código abaixo serve para mostrar os campos na tela de perfil e edição de usuários:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
** Adiciona novos campos ao perfil de usuario
** By wptotal.com.br
**/
 
function add_extra_fields_user_profile($user) {
 
$user_telefone = isset($_POST['user_telefone']) ? $_POST['user_telefone'] : get_the_author_meta('user_telefone', $user->ID);
$user_endereco = isset($_POST['user_endereco']) ? $_POST['user_endereco'] : get_the_author_meta('user_endereco', $user->ID);
$user_cep = isset($_POST['user_cep']) ? $_POST['user_cep'] : get_the_author_meta('user_cep', $user->ID);
?>
 
<h3>Dados para Contato</h3>
<table class="form-table">
<tbody>
<tr>
<th><label for="user_telefone">Telefone <span class="description">(obrigatório)</span></label></th>
<td><input type="text" name="user_telefone" id="user_telefone" value="<?php echo esc_attr($user_telefone) ?>" class="regular-text" /></td>
</tr>
<tr>
<th><label for="user_endereco">Endereço</label></th>
<td>
<input type="text" name="user_endereco" id="user_endereco" value="<?php echo esc_attr($user_endereco) ?>" class="regular-text" />
<p>Incluir AV, Rua e etc.</p>
</td>
</tr>
<tr>
<th><label for="user_cep">CEP</label></th>
<td>
<input type="text" name="user_cep" id="user_cep" value="<?php echo esc_attr($user_cep) ?>" class="regular-text" />
<p class="description">Não sabe o CEP? <a href="http://www.buscacep.correios.com.br/sistemas/buscacep/" target="_blank" rel="nofollow">clique aqui</a> para consultar.</p>
</td>
</tr>
</tbody>
</table>
 
<?php
}
add_action('show_user_profile', 'add_extra_fields_user_profile');
add_action('edit_user_profile', 'add_extra_fields_user_profile');
/**
** Adiciona novos campos ao perfil de usuario
** By wptotal.com.br
**/

function add_extra_fields_user_profile($user) {

$user_telefone = isset($_POST['user_telefone']) ? $_POST['user_telefone'] : get_the_author_meta('user_telefone', $user->ID);
$user_endereco = isset($_POST['user_endereco']) ? $_POST['user_endereco'] : get_the_author_meta('user_endereco', $user->ID);
$user_cep = isset($_POST['user_cep']) ? $_POST['user_cep'] : get_the_author_meta('user_cep', $user->ID);
?>

<h3>Dados para Contato</h3>
<table class="form-table">
<tbody>
<tr>
<th><label for="user_telefone">Telefone <span class="description">(obrigatório)</span></label></th>
<td><input type="text" name="user_telefone" id="user_telefone" value="<?php echo esc_attr($user_telefone) ?>" class="regular-text" /></td>
</tr>
<tr>
<th><label for="user_endereco">Endereço</label></th>
<td>
<input type="text" name="user_endereco" id="user_endereco" value="<?php echo esc_attr($user_endereco) ?>" class="regular-text" />
<p>Incluir AV, Rua e etc.</p>
</td>
</tr>
<tr>
<th><label for="user_cep">CEP</label></th>
<td>
<input type="text" name="user_cep" id="user_cep" value="<?php echo esc_attr($user_cep) ?>" class="regular-text" />
<p class="description">Não sabe o CEP? <a href="http://www.buscacep.correios.com.br/sistemas/buscacep/" target="_blank" rel="nofollow">clique aqui</a> para consultar.</p>
</td>
</tr>
</tbody>
</table>

<?php
}
add_action('show_user_profile', 'add_extra_fields_user_profile');
add_action('edit_user_profile', 'add_extra_fields_user_profile');

Depois de exibir os campos é necessário validar e gravar no banco de dados, para isso usaremos o seguinte código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
** Grava os dados dos novos campos de usuários no banco de dados
** Obs: É necessário validar os campos obrigatórios antes de gravar as alterações.
** By wptotal.com.br
**/
function save_extra_fields_user_profile($user_id) {
 
if (!current_user_can('edit_user', $user_id))
return false;
 
// Validando o campo obrigatorio
if ( !isset( $_POST['user_telefone'] ) || empty( $_POST['user_telefone'] ) ) {
return false;
}
 
update_usermeta($user_id, 'user_telefone', $_POST['user_telefone']);
update_usermeta($user_id, 'user_endereco', $_POST['user_endereco']);
update_usermeta($user_id, 'user_cep', $_POST['user_cep']);
}
add_action('personal_options_update', 'save_extra_fields_user_profile');
add_action('edit_user_profile_update', 'save_extra_fields_user_profile');
/**
** Grava os dados dos novos campos de usuários no banco de dados
** Obs: É necessário validar os campos obrigatórios antes de gravar as alterações.
** By wptotal.com.br
**/
function save_extra_fields_user_profile($user_id) {

if (!current_user_can('edit_user', $user_id))
return false;

// Validando o campo obrigatorio
if ( !isset( $_POST['user_telefone'] ) || empty( $_POST['user_telefone'] ) ) {
return false;
}

update_usermeta($user_id, 'user_telefone', $_POST['user_telefone']);
update_usermeta($user_id, 'user_endereco', $_POST['user_endereco']);
update_usermeta($user_id, 'user_cep', $_POST['user_cep']);
}
add_action('personal_options_update', 'save_extra_fields_user_profile');
add_action('edit_user_profile_update', 'save_extra_fields_user_profile');

É importante ressaltar que o segundo "if" do código acima é para validar se o campo "user_telefone" foi preenchido. Caso não tenha campos de preenchimento obrigatório esse "if" deverá ser removido.

Exibição de mensagens de erros

Agora vem a parte da exibição de mensagens de erros dos campos obrigatórios. Caso não tenha nenhum campo de preenchimento obrigatório, não é necessário o código abaixo. Ele somente mostra a mensagem de erro. Pelo meus testes, somente gerar a mensagem de erro (código abaixo) não impede a gravação dos dados na tela de edição de usuários. Além da validação abaixo, é preciso validar o campo antes de grava-lo no banco de dados, conforme foi feito em save_extra_fields_user_profile().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
** Valida e Mostra a(s) mensagem(s) de erro(s) dos novos campos de usuário
** By wptotal.com.br
**/
function validate_fields_in_user_profile(&$errors,$is_update) {
 
if ( ! $is_update ) {
return true;
}
 
// Somente exibe a mensagem de erro.
if ( ! isset( $_POST['user_telefone'] ) || empty( $_POST['user_telefone'] ) ) {
$errors->add( 'user_telefone', '<strong>ERRO</strong>: Digite um telefone do usuário.' );
}
}
add_action( 'user_profile_update_errors', 'validate_fields_in_user_profile',10,2);
/**
** Valida e Mostra a(s) mensagem(s) de erro(s) dos novos campos de usuário
** By wptotal.com.br
**/
function validate_fields_in_user_profile(&$errors,$is_update) {

if ( ! $is_update ) {
return true;
}

// Somente exibe a mensagem de erro.
if ( ! isset( $_POST['user_telefone'] ) || empty( $_POST['user_telefone'] ) ) {
$errors->add( 'user_telefone', '<strong>ERRO</strong>: Digite um telefone do usuário.' );
}
}
add_action( 'user_profile_update_errors', 'validate_fields_in_user_profile',10,2);

Como Exibir o Valor dos Campos

Depois de adicionar os novos campos ao perfil do usuário é provável que você queira exibi-lo em alguma página ou post. Para isso, use o seguinte código:

1
2
3
4
// Imprime na tela os dados do campo a partir do ID do author do post atual
echo get_the_author_meta('nome_do_campo', $post->post_author);
// OU
the_author_meta('nome_do_campo', $post->post_author);
// Imprime na tela os dados do campo a partir do ID do author do post atual
echo get_the_author_meta('nome_do_campo', $post->post_author);
// OU
the_author_meta('nome_do_campo', $post->post_author);

Parâmetros da função get_the_author_meta:

1
function get_the_author_meta( $field = '', $user_id = false )
function get_the_author_meta( $field = '', $user_id = false )

Conclusão

Provavelmente você necessite de campos diferentes dos mostrados no exemplo acima. Eu dei o máximo de informação possível para que você possa fazer a edição dos códigos acima. Eu passei até informações que não encontrei em artigo nenhum da internet, mas caso ainda tenha restado alguma dúvida, por favor, poste-a na seção de comentários. Mais uma vez eu vou lembrar que existem dois métodos porque o WordPress fornece duas maneiras diferentes de adicionar novos campos, você usa qual achar mais conveniente (não precisa usar as dois métodos!). O arquivo onde deve ser adicionado os códigos também encontra-se no artigo acima.

23 Comentários para “Adicionando Campos Extras ao Perfil do Usuário

    1. Paulo Junior

    Amigo. Boa tarde! Em qual tabela ele guarda etas informações.
    Agradeço desde já.

      1. Lucas Tavares
      2. (Autor do Post)

      Creio que ele armazene na tabela wp_usermeta.

      Abraços.

    1. Elton

    Saberia como deixar o campo obrigatório?

      1. Lucas Tavares
      2. (Autor do Post)

      Olá Elton,

      Infelizmente ainda não descobri como fazer isso. Se eu achar alguma coisa eu atualizarei este comentário.

      Abraços.

    1. Borges

    Seria importante citar o caminho correto do(s) diretório(s), pois o arquivo functions.php existe em várias pastas do WordPress. Utilizei o tutorial, coloquei os códigos no mesmo arquivo e deu um problema no meu site. Acho que coloquei em arquivo errado.

      1. Lucas Tavares
      2. (Autor do Post)

      Olá Borges,

      Adicionei a informação que é o arquivo functions.php do tema (que fica na pasta wp-content/themes/{nome do tema}/). Você disse que deu problema no seu seu site, se ainda tiver com problemas é só postar aqui que eu ajudo você.

      Abraços.

    1. Luiz Felipe

    E como faço para exibir esses dados do usuário em um post por exemplo?

      1. Lucas Tavares
      2. (Autor do Post)

      Olá Luiz,

      É só colocar o código abaixo onde deseja exibir o valor:
      <?php echo get_the_author_meta('nome_do_campo', $post->post_author); ?>

      Abraços.

    1. wellington

    Olá,
    Fiz igual ao que está descrito no post, mas os dados não estão sendo inseridos no banco de dados.
    Precisa de mais códigos de que os que você postou?

      1. Lucas Tavares
      2. (Autor do Post)

      Olá Wellington,

      Precisa somente dos códigos que eu postei. Você inseriu o código corretamente no arquivo functions.php do seu tema?

    1. Douglas Fernando

    Muito Legal o tutorial , só que estes campos não eram exibidos quando se vai inserir um "Novo" usuário, para conseguir isto , tive de escrever um novo "action" do wordpress , com o argumento "user_new_form", desta forma :

    add_action('user_new_form', 'add_extra_fields_user_profile');

    Outra coisa , isto é para ajudar na postagem , para quem quiser exibir o campo na coluna do admin dos usuários , é só adptar este código abaixo segundo a sua realidade , no meu caso eu só estava precisando criar um campo , que se chama "cargo" :

    //Cria a coluna "Cargo" no painel admin
    function theme_add_user_zip_code_column($columns) {

    $columns['cargo'] = __('Cargo na Igreja (Obs:Aparece só na Devocional)', 'theme');
    return $columns;
    }

    // end theme_add_user_zip_code_column
    add_filter('manage_users_columns', 'theme_add_user_zip_code_column');

    //Exibe o valor gravado de "Cargo"
    function theme_show_user_zip_code_data($value, $column_name, $user_id) {

    if ('cargo' == $column_name) {
    return get_user_meta($user_id, 'cargo', true);
    } // end if
    }

    // end theme_show_user_zip_code_data
    add_action('manage_users_custom_column', 'theme_show_user_zip_code_data', 10, 3);

      1. Lucas Tavares
      2. (Autor do Post)

      Olá Douglas,

      Obrigado por sua contribuição.

    1. Eliomar

    Como faço pra deixar visível os campos na hora do usuário fazer o registro no site? Por default o wp só pede nome de usuário e e-mail...

      1. Lucas Tavares
      2. (Autor do Post)

      Olá Eliomar,

      Você pode adicionar novos campos a tela de registro usando o action "register_form", conforme o exemplo abaixo:

      function add_extra_fields_register_form() {
      ?>
      <p>
      <label for="user_telefone">Telefone<br>
      <input type="text" name="user_telefone" id="user_telefone" value="" class="regular-text" /></label>
      </p>
      <p>
      <label for="user_endereco">Endereço<br>
      <input type="text" name="user_endereco" id="user_endereco" value="" class="regular-text" /></label>
      </p>
      <p>
      <label for="user_cep">CEP<br>
      <input type="text" name="user_cep" id="user_cep" value="" class="regular-text" /></label>
      </p>
      <?php
      }
      add_action('register_form', 'add_extra_fields_register_form');

      E use o seguinte código para gravar os dados:

      function save_extra_fields_user_register($user_id) {

      //Validando campo obrigatório
      if ( isset( $_POST['user_telefone'] ) && !empty( $_POST['user_telefone'] ) ) {
      update_usermeta($user_id, 'user_telefone', $_POST['user_telefone']);
      }
      update_usermeta($user_id, 'user_endereco', $_POST['user_endereco']);
      update_usermeta($user_id, 'user_cep', $_POST['user_cep']);
      }
      add_action('user_register', 'save_extra_fields_user_register' );

    1. Guilhermewp

    Olá Amigo, é possível incluir no perfil do usuário os produtos que ele comprou via woocommerce? Eu sei que na pagina da conta do Woocommerce eles aparecem, no meu caso, estou usando o HyperDB pra compartilhar os usuarios entre 2 instalações WP, mas não sei como compartilhar as tabelas e produtos do Woocommerce, vocês tem algum conteúdo sobre isso?

      1. Lucas Tavares
      2. (Autor do Post)

      Olá Guilhermewp,

      Eu não costumo trabalhar com o WooCommerce, não sei se isso que você deseja é possível.

    1. luiz dornelas

    Olá Lucas, acho que esse seu post apesar de antigo é a resposta para o que estou precisando. Meu cliente quer que sejam colocados dois campos a mais no auto cadastro para identificação dos usuários e isso tem que ser escrito no perfil do usuário. Não estava encontrando uma resposta para isso e parece que com sua postagem e os comentários vou conseguir. Assim espero. Obrigado!

    1. Walison

    Gostaria de saber como defino a tabela e a coluna onde deve ser salvo os dados, ao invez de usar a tabela wp_usermeta?

    1. Walison

    Boa tarde, Gostaria de saber se tem como adicionar campos no formulário de user-new.php e salvar na tabela wp_usermeta.

Deixe um comentário

(required)
(required)