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: