Crie seus próprios campos de contato de usuário do WordPress
Hoje eu criei um novo plugin para você. Um plugin que lida com os métodos de contato dos usuários. Basicamente quando você edita um usuário na administração, existe um bloco de “informações de contato”. Bem, eu gostaria de mostrar a você como adicionar seus próprios campos lá, e indo um pouco mais longe, como mostrar (ou não) esses novos campos na página de registro.
Aqui está uma prévia do que vamos criar:
Novos campos de usuário na página de edição
Campos personalizados na página de registro
E para isso, como de costume, vamos criar um plugin simples e legal!
Etapa 1: criar o plug-in
Crie uma nova pasta em wp-content/plugins e chame-a de “custom-user-contact-methods”. Dentro desta pasta recém-criada, crie um arquivo chamado “rc-custom-user-contact-methods.php” e abra-o em seu software de edição favorito.
Coloque este conteúdo em seu arquivo vazio. Este código simplesmente registra o plugin:
<?php
/*
Plugin Name: Custom User Contact Methods
Plugin URL: http://remicorson.com/
Description: Add custom fields to users “contact” section
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
*/
Etapa 2: definir seus campos personalizados
Em seguida, precisamos criar uma variável que conterá nossos campos personalizados, aqueles a serem usados
$extra_fields = array(
array( ‘facebook’, __( ‘Facebook Username’, ‘rc_cucm’ ), true ),
array( ‘twitter’, __( ‘Twitter Username’, ‘rc_cucm’ ), true ),
array( ‘googleplus’, __( ‘Google+ ID’, ‘rc_cucm’ ), true ),
array( ‘linkedin’, __( ‘Linked In ID’, ‘rc_cucm’ ), false ),
array( ‘pinterest’, __( ‘Pinterest Username’, ‘rc_cucm’ ), false ),
array( ‘wordpress’, __( ‘WordPress.org Username’, ‘rc_cucm’ ), false ),
array( ‘phone’, __( ‘Phone Number’, ‘rc_cucm’ ), true )
);
Estamos armazenando cada campodentro de um array que possui 3 parâmetros, o primeiro é o ID do campo, o segundo é o rótulo do campo e o último é uma informação booleana que define se o campo é mostrado na página de cadastro ou não . Você pode adicionar quantos parâmetros desejar, por exemplo, um espaço reservado ou uma informação obrigatória.
Etapa 3: enganche o filtro certo
Agora precisamos conectar uma função ao filtro correto. No nosso caso específico, o filtro é “user_contactmethods”, e o nome da função que vamos criar é “rc_add_user_contactmethods”.
// Use the user_contactmethods to add new fields
add_filter( ‘user_contactmethods’, ‘rc_add_user_contactmethods’ );
Etapa 4: criar nossos campos personalizados
Agora precisamos criar a função “rc_add_user_contactmethods”. É aquele que adicionará nossos campos personalizados à página de edição do usuário. A boa notícia é que armazenamos nossos campos dentro de um array, isso significa que a função a seguir será totalmente dinâmica, e será muito fácil adicionar novos campos apenas modificando a variável $extra_fields.
/**
* Add custom users custom contact methods
*
* @access public
* @since 1.0
* @return void
*/
function rc_add_user_contactmethods( $user_contactmethods ) {
// Get fields
global $extra_fields;
// Display each fields
foreach( $extra_fields as $field ) {
if ( !isset( $contactmethods[ $field[0] ] ) )
$user_contactmethods[ $field[0] ] = $field[1];
}
// Returns the contact methods
return $user_contactmethods;
}
Nesta etapa, se você salvar e ativar o plug-in, deverá ver seus campos personalizados na página de edição do usuário. Como estamos usando o gancho correto, não precisamos criar um campo de dados para “salvar”. Então, o plugin está funcionando muito bem no momento. Mas eu gostaria de ir um pouco além e adicionar a opção de exibir esses campos na página de registro. Certifique-se de verificar nas configurações a caixa de seleção “Qualquer pessoa pode se registrar”, caso contrário você não poderá ver o link “Registrar”.
Etapa 5: Ganchos da página de registro
Para adicionar nossos campos na página de registro, precisamos acessar pelo menos dois ganchos e criar duas funções. Um para exibir os campos e o segundo para salvar os dados dos campos no banco de dados.
Vamos ligar nossas funções:
// Add our fields to the registration process
add_action( ‘register_form’, ‘rc_register_form_display_extra_fields’ );
add_action( ‘user_register’, ‘rc_user_register_save_extra_fields’, 100 );
Etapa 6: exibir a página de registro de campos personalizados
No código acima declaramos duas funções. A primeira é exibir os campos na página de registro. Nesta parte precisamos cuidar do terceiro parâmetro de cada array em $extra_fields. Este parâmetro booleano informa se os campos devem ser mostrados ou não. True: o campo é mostrado, false: o campo não é mostrado.
/**
* Show custom fields on registration page
*
* Show custom fields on registration if field third parameter is set to true
*
* @access public
* @since 1.0
* @return void
*/
function rc_register_form_display_extra_fields() {
// Get fields
global $extra_fields;
// Display each field if 3th parameter set to “true”
foreach( $extra_fields as $field ) {
if ( $field[2] == true ) {
$field_value = isset( $_POST[ $field[0] ] ) ? $_POST[ $field[0] ] : ”;
echo ‘<p>
<label for=”‘. esc_attr( $field[0] ) .'”>’. esc_html( $field[1] ) .'<br />
<input type=”text” name=”‘. esc_attr( $field[0] ) .'” id=”‘. esc_attr( $field[0] ) .'” class=”input” value=”‘. esc_attr( $field_value ) .'” size=”20″ /></label>
</label>
</p>’;
} // endif
} // end foreach
}
Etapa 7: Armazenar os valores dos campos no processo de registro
Agora que nossos campos são mostrados na página de cadastro, precisamos armazenar seus valores no banco de dados. Este é o objetivo da função “rc_user_register_save_extra_fields”. Para isso, precisamos usar a função “ wp_update_user() ”.
/**
* Save field values
*
* @access public
* @since 1.0
* @return void
*/
function rc_user_register_save_extra_fields( $user_id, $password = ”, $meta = array() ) {
// Get fields
global $extra_fields;
$userdata = array();
$userdata[‘ID’] = $user_id;
// Save each field
foreach( $extra_fields as $field ) {
if( $field[2] == true ) {
$userdata[ $field[0] ] = $_POST[ $field[0] ];
} // endif
} // end foreach
$new_user_id = wp_update_user( $userdata );
}
Conclusão
Bem, vimos o básico de como adicionar novos campos aos métodos de contato do usuário, mas isso é tudo. Você pode, por exemplo, remover campos existentes como “Yahoo IM”, “AIM” e “Jabber” fazendo um simples unset(). Mas você também pode adicionar algumas funções para higienizar seus campos personalizados para verificar, por exemplo, se o número de telefone tem um formato adequado, se um campo é obrigatório ou não etc etc… Não hesite em solicitar recursos específicos nos comentários!
Ah, e uma última coisa… se você quiser exibir os dados de qualquer um dos seus campos, basta usar isto:
// Param 1 is user ID
// Param 2 is field ID
// Param 3 is there to get a var or an array
echo get_user_meta( 1, ‘twitter’, true );