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/