Blog

Adicionando novos campos ao perfil de usuário

O WordPress é uma solução muito rica em recursos, porém, não é completa e muito menos adequada a todo tipo de projeto por padrão. Ainda assim, podemos nos beneficiar de toda a flexibilidade para alterações e conseguir assim uma plataforma ideal para realizar nossas necessidades.

Algo muito útil para quando você vai permitir cadastros de usuários e/ou escritores em um site com WordPress é a possibilidade de adicionar e remover campos de perfil de usuário.

A instalação padrão do WordPress traz alguns campos que na grande maioria dos casos são inúteis, enquanto carece de outros campos que seriam utilizados mais frequentemente. Basta ver no perfil do usuário os campos Yahoo IM, AIM e Jabber/Google Talk, dos quais poderiam ser substituídos por Facebook, Twitter e Google+, por exemplo.

Adicionando novos campos

Imaginemos a situação em que precisamos adicionar os campos para que o usuário preencha com o link para seu perfil no Facebook, Twitter e Google +. O código que precisa ser inserido no functions.php do seu tema será o seguinte:

function bloglite_campos_sociais($user) { ?>

<h3>Informações Sociais</h3>

<table class="form-table">
  <tr>
    <th><label for="facebook">Facebook</label></th>
    <td>
      <input type="text" name="facebook" id="facebook" value="<?php echo esc_attr(get_the_author_meta('facebook', $user->ID)); ?>" class="regular-text" /> <br />
      <span class="description">Digite a URL do seu perfil no Facebook.</span>
    </td>
  </tr>

  <tr>
    <th><label for="twitter">Twitter</label></th>
    <td>
      <input type="text" name="twitter" id="twitter" value="<?php echo esc_attr(get_the_author_meta('twitter', $user->ID)); ?>" class="regular-text" /> <br />
      <span class="description">Digite a URL do seu perfil no Twitter.</span>
    </td>
  </tr>

  <tr>
    <th><label for="gplus">Google+</label></th>
    <td>
      <input type="text" name="gplus" id="gplus" value="<?php echo esc_attr(get_the_author_meta('gplus', $user->ID)); ?>" class="regular-text" /> <br />
      <span class="description">Digite a URL do seu perfil no Google+.</span>
    </td>
  </tr>
</table>

<?php }

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

Explicando basicamente o código, nós criamos uma área no perfil contendo os campos que precisamos e usamos a função get_the_author_meta() para mostrar as informações desses campos.

Agora, precisamos criar a função para salvar as informações que forem inseridas nesses campos ao banco de dados. Segue o código a ser adicionado também no functions.php do seu tema:

function bloglite_salvar_campos_sociais($user_id) {
  if (!current_user_can('edit_user', $user_id))
  return false;
 
  update_usermeta($user_id, 'facebook', $_POST['facebook']);
  update_usermeta($user_id, 'twitter', $_POST['twitter']);
  update_usermeta($user_id, 'gplus', $_POST['gplus']);
}

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

Agora, simplesmente utilizamos a função update_usermeta() e passamos como parâmetro o ID do usuário e o campo a ser salvo. O resultado vai ser parecido com isto:

Removendo certos campos

Seguindo o caso de que necessitamos remover os campos Yahoo IM, AIM e Jabber/Google Talk, usaremos a função unset para remover os campos indesejados. No functions.php, adicione:

function bloglite_remover_campos($contactmethods) {
  unset( $contactmethods[ 'aim' ] );
  unset( $contactmethods[ 'yim' ] );
  unset( $contactmethods[ 'jabber' ] );
 
  return $contactmethods;
}

add_filter('user_contactmethods', 'bloglite_remover_campos');

Simples assim!

As possibilidades são infinitas. Muitos plugins utilizam tais funções para personalizar ainda mais o perfil do usuário com diversas outras informações como Endereço, Telefone etc.

Você utiliza outros campos no perfil de usuário em seu blog? Conte-nos quais nos comentários.

Deixe um comentário

Hospede seu projeto em WordPress com alto desempenho