Melhorando o formulário de cadastro do WordPress

Existem uma série de plugins que gerenciam para você o cadastro de usuários no WordPress adicionando ou retirando campos, entretanto diversas vezes os achei muito limitados e até difíceis de gerenciar pelo usuário comum.

O problema que eu vejo em se utilizar plugins que são feitos por terceiros é que você sempre fica à mercê das atualizações promovidas pelo desenvolvedor ou a própria descontinuação do projeto. Então, exceto pelos plugins que são de desenvolvedores ou empresas conhecidas, eu prefiro sempre que possível fazer a minha implementação.

Neste exemplo não construirei um plugin, mas indico como fazer o uso das funções do WordPress para gerenciar o cadastro de usuários.

Primeiramente devemos relacionar o que queremos em nosso formulário.

  • Nome
  • Email
  • Twitter
  • Telefone
  • Endereço
  • Bairro
  • Cidade
  • Estado
  • CEP

A seguir, baseado no formulário de cadastro que o WP disponibiliza vamos personalizar o nosso. Iniciaremos excluindo alguns campos que não são necessários.

add_filter('user_contactmethods','add_contactmethod',10,1);

function add_contactmethod( $contactmethods ) {
  $contactmethods['user_twitter'] = 'Twitter';
  $contactmethods['user_telephone'] = 'Telefone';

  unset($contactmethods['aim']);
  unset($contactmethods['jabber']);
  unset($contactmethods['yim']);

  return $contactmethods;
}

A variável $contactmethods contempla todas os campos referentes às informações de contato. Poderíamos já incluir nesta função todos os campos que queremos como o de endereço e bairro, mas ficaria confuso misturar esse tipo de informação, então para esta situação, iremos criar uma seção exclusiva para estas informações extras. Em resumo, para adicionar campos utilize $contactmethods[‘nome_do_campo’] = ‘Label do Campo’ e para excluir um existente utilize a função do php unset($contactmethods[‘nome_do_campo’]).

Então já temos assim os campos Nome e email (padrão do WordPress) e agora acabamos de adicionar Twitter e Telefone. Vamos agora criar o formulário interno com os novos campos tanto para inserção quanto para atualização de cadastro.

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

function extra_info_profile_fields($user) { ?>
<h3>Informações extras</h3>
  <table>
    <tr>
      <th><label for="user_address">Endereço</label></th>
      <td>
        <input type="text" name="user_address" id="user_address" value="<?php echo esc_attr( get_the_author_meta( 'user_address', $user->ID ) ); ?>" /><br />
        <span>Preencha o seu endereço.</span>
      </td>
    </tr>
    <tr>   
      <th><label for="user_district">Bairro</label></th>
      <td>
        <input type="text" name="user_district" id="user_district" value="<?php echo esc_attr( get_the_author_meta( 'user_district', $user->ID ) ); ?>" /><br />
        <span>Preencha com o seu bairro.</span>
      </td>
    </tr>
    <tr>
      <th><label for="user_city">Cidade</label></th>
      <td>
        <input type="text" name="user_city" id="user_city" value="<?php echo esc_attr( get_the_author_meta( 'user_city', $user->ID ) ); ?>" /><br />
        <span>Preencha com a sua cidade. </span>
      </td>
    </tr>
    <tr>
      <th><label for="user_state">Estado</label></th>
      <td>
       	<input type="text" name="user_state" id="user_state" value="<?php echo esc_attr( get_the_author_meta( 'user_state', $user->ID ) ); ?>" /><br />
        <span>Preencha com o seu estado. </span>
      </td>
    </tr>
    <tr>
      <th><label for="user_zipcode">CEP</label></th>
      <td>
        <input type="text" name="user_zipcode" id="user_zipcode" value="<?php echo esc_attr( get_the_author_meta( 'user_zipcode', $user->ID ) ); ?>" /><br />
        <span>Digite o seu CEP. </span>
      </td>
    </tr>
 </table>

<?php }
add_action( 'personal_options_update', 'save_extra_info_profile_fields' );
add_action( 'edit_user_profile_update', 'save_extra_info_profile_fields' ); 

function save_extra_info_profile_fields( $user_id ) {
  if ( !current_user_can( 'edit_user', $user_id ) ) {
    return false;
  } 
  update_usermeta( $user_id, 'user_address', $_POST['user_address'] );
  update_usermeta( $user_id, 'user_district', $_POST['user_district'] );
  update_usermeta( $user_id, 'user_city', $_POST['user_city'] );
  update_usermeta( $user_id, 'user_state', $_POST['user_state'] );
  update_usermeta( $user_id, 'user_zipcode', $_POST['user_zipcode'] );
}

A função criada abaixo faz uso da função do WordPress wp_insert_user, que serve exclusivamente para criar o cadastro do usuário, mas ela só responde pelos campos padrão e pelos campos criados por meio do hook user_contactmethods. E os outros campos? Caso a função seja concluída, ela nos retorna o ID do usuário cadastrado, pegamos esse ID e mandamos atualizar o cadastro. Para mais informações sobre esta função acesse http://codex.wordpress.org/Function_Reference/wp_insert_user e para a função de atualizar o cadastro http://codex.wordpress.org/Function_Reference/wp_update_user.

function criar_usuario($firstname, $lastname, $nickname, $user_nicename, $user_email, $display_name, $user_site, $user_blog, $user_twitter, $user_telephone, $user_login, $user_pass, $user_role="subscriber"){
    $user_data = array();
    $user_data["first_name"] = $firstname;
    $user_data["last_name"] = $lastname;
    $user_data["nickname"] = $nickname;
    $user_data["user_nicename"] = $user_nicename;
    $user_data["user_email"] = $user_email;
    $user_data["display_name"] = $display_name;
    $user_data["user_url"] = $user_site;
    $user_data["user_blog"] = $user_blog;
    $user_data["user_twitter"] = $user_twitter;
    $user_data["user_telephone"] = $user_telephone;
    $user_data["user_login"] = $user_login;
    $user_data["user_pass"] = $user_pass;
    $user_data["role"] = $user_role;

    return  wp_insert_user( $user_data );
    update_user();
}
function update_user($user_id, $address, $district, $city, $state, $zipcode){
  if(!is_wp_error($user_id)){
    update_user_meta( $user_id, 'user_address', $address);
    update_user_meta( $user_id, 'user_complement', $complement);
    update_user_meta( $user_id, 'user_district', $district);
    update_user_meta( $user_id, 'user_city', $city);
    update_user_meta( $user_id, 'user_state', $state);
    update_user_meta( $user_id, 'user_zipcode', $zipcode);
  }
}

Para efetivar o seu cadastro, basta criar o seu formulário e na página de processamento chamar as funções acima criadas com as suas respectivas variáveis preenchidas.

 

Plugins Sugeridos

Register Plus
http://wordpress.org/extend/plugins/register-plus/

Simplr Registration Form
http://wordpress.org/extend/plugins/simplr-registration-form/

Register Plus Redux
http://wordpress.org/extend/plugins/register-plus-redux/

6 respostas para “Melhorando o formulário de cadastro do WordPress”

  1. Boa tarde,

    Possuo um site/blog onde várias pessoas compartilham suas experiências de viagens e trabalho.
    Gostaria de saber se existe um plugin ou a possibilidade de cadastrar e posteriormente filtrar registros de estabelecimentos tipo, hotéis, restaurantes, bares no WordPress?
    Funcionaria mais ou menos assim:
    Eu ou algum consultor fez uma viagem e se hospedou em um hotel de uma determinada cidade e acha interessante compartilhar com os demais integrantes do blog. Então, ele poderia cadastrar esse hotel no site e que as pessoas que acessem o blog possam pesquisar por hotéis desta determinada cidade o sistema possa mostrar todos os hotéis relacionados a essa cidade.
    Será que existe algum plug que faz isso ou teria que fazer um código específico para isso?
    Parabéns pelo blog.
    Obrigado…

    Marcelo Costa

    1. Olá Marcelo,
      Eu entendi o que você pretende fazer. Essa opção que eu publiquei, provavelmente não serve para você, porque a intenção aqui é integrar o cadastro de usuário ao seu site WordPress.
      Se você utilizar para outro tipo de cadastro, pode ficar muito bagunçado e dificultar a administracão.
      Não conheço um plugin que faça isso, acredito que tenha que produzir um, mas o meu conselho é fazer isso dentro de um plugin com tabelas dedicadas, assim se futuramente você quiser ampliar esta ferramenta como por exemplo portar para um aplicativo mobile ou integrar a algum outro sistema, você não compromete o seu site principal.

  2. olá, tudo bem?
    Tenho intenção de fazer em meu site um local onde os clientes possam fazer login (Concluído), mas não consegui encontrar pela internet algo que me ajude a criar uma pagina no meu site para ele se cadastrar colocando todas as informações do seu perfil. E um local no site para eles alterar as informações se necessário, sem a necessidade de entrar no painel do wordpress. Sabe como me ajudar? Obrigado bom post!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *