Back-End

9 out, 2012

Como adicionar campos ao registro de usuários no WordPress?

Publicidade

Para quem trabalha com blogs em WordPress e/ou tem projetos que necessitam que os usuários se registrem antes de começarem a usar o sistema, provavelmente já sentiu necessidade de adicionar campos específicos ao registro de usuários nesse mesmo WordPress. Primeiro teremos que acrescentar esses campos ao perfil de usuário no sistema do WordPress, e posteriormente mostrar esses campos para o usuário no ato do registro em seu site/blog. Este processo é extremamente simples de realizar, e lhe permite acrescentar quantos campos você desejar, com as informações que você precisar. Dessa forma, você pode coletar informações específicas como a morada do usuário, perfis de mídias sociais, celular, etc., dependendo da especificidade do seu projeto. O desenvolvedor Tom McFarlin falou recentemente deste assunto, e aproveitamos algumas das dicas dele para este artigo, a fim de o ajudar a adicionar campos ao registro de usuários no WordPress.

Definindo os campos

O primeiro passo é definir concretamente quais os campos que você pretende colocar como imprescindíveis ao registro no seu website ou blog. Para tornar as coisas simples e meramente explicativas, vamos resumir o nosso registro de usuário a quatro campos fundamentais:

  • Primeiro Nome;
  • Último Nome;
  • Endereço de Email;
  • Código Postal.

O WordPress suporta nativamente todos esses campos, excepto o campo de Código Postal, logo teremos que acrescentar esse campo manualmente aos meta dados do usuário. Tenha em consideração também que o processo de validação até ao registro de um usuário é grande. Existem várias validações pelo caminho, então é necessário que você tome especial atenção a strings vazias, endereços de email bem formados, código postal bem formado, etc, para que não dê erro no final. Isso significa que é necessário sanitizar todos os campos, e que nenhum campo é introduzido no banco de dados sem ser sanitizado primeiro.

Adicionar campos ao registro

Assumindo que todos os campos são válidos, você pode começar a programar o registro de usuário. Tendo em consideração que a introdução de dados é colocada na variável $input, você pode usar a função wp_insert_user. Note que esta função retorna o ID do usuário assim que ele é criado:

$user_id = wp_insert_user(
array(
'user_login'    =>   $input['email_address'],
'user_pass' =>   wp_generate_password ( 12, false ),
'first_name'    =>   $input['first_name'],
'last_name' =>   $input['last_name'],
'user_email'    =>   $input['email_address'],
'display_name'  =>   $input['first_name'] . ' ' . $input['last_name'],
'nickname'  =>   $input['first_name'] . ' ' . $input['last_name'],
'role'      =>   'None'
)
);

Note que iremos usar também a função wp_generate_password para gerar automaticamente uma password para o usuário.

Embora estejamos criando um usuário, nós teremos de acrescentar o campo de Código Postal ao perfil desse mesmo usuário. Para fazermos isso, poderemos tirar vantagem da função update_user_meta. Uma vez que a função wp_insert_user retorna o ID do usuário que acabou de ser criado, poderemos facilmente associar um Código Postal a esse mesmo usuário:

update_user_meta( $user_id, 'zip_code', $input['zip_code'] );

Simples de realizar, mas pouco prático, uma vez que não conseguimos visualizar esse campo no perfil do usuário. Chegou a hora de trabalharmos nesse aspecto.

Trabalhando o perfil do usuário

Para conseguirmos ver os meta dados que criámos para o usuário, precisamos fazer duas coisas:

  • Adicionar uma nova coluna na dashboard de usuários do WordPress;
  • Renderizar o código postal associado ao usuário em questão.

O WordPress providencia dois truques/ganchos para fazermos isso: manage_users_columns e manage_users_custom_column.

Primeiro teremos de adicionar uma nova coluna na dashboard de usuários:

/**
* Adds a Zip Code column to the user display dashboard.
*
* @param   $columns    The array of columns that are displayed on the user dashboard
* @return          The updated array of columns now including zip codes.
*/
function theme_add_user_zip_code_column( $columns ) {

$columns['zip_code'] = __( 'Zip Code', 'theme' );
return $columns;

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

Depois, iremos retornar o código postal associado ao usuário:

/**
 * Populates the Zip Code column with the specified user's zip code.
 *
 * @param   $value      An empty string
 * @param   $column_name    The name of the column to populate
 * @param   $user_id    The ID of the user for which we're working with
 * @return          The zip code associated with the user
 */
function theme_show_user_zip_code_data( $value, $column_name, $user_id ) {

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

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

Assumindo que você fez tudo certo, o resultado final será parecido com este aqui: