Terça-feira, 03 de novembro de 2009 às 11h00

Criando página de opções no padrão WordPress a partir da versão 2.7

Faça o curso: jQuery na Prática

Este artigo conclui a série sobre o mecanismo e as páginas de opções no WordPress. É recomendável a leitura dos artigos anteriores para um melhor aproveitamento deste. Portanto, leia O mecanismo de opções do WordPress e Criando páginas de opções no padrão WordPress.

A partir da versão do 2.7 do WordPress, a criação de páginas de opções foi reestruturada para oferecer uma maior segurança as opções que são armazenadas no banco de dados em uso.

O modelo apresentado anteriormente deixa brechas de segurança, uma vez que as opções a serem criadas são informadas num campo de formulário oculto. Através de uma ferramenta como o Firebug, por exemplo, eu consigo editar o campo oculto e definir novas opções e adicionar como valor códigos maliciosos.

As opções a serem criadas com esse novo modelo são definidas no arquivo PHP. Logo, usuários mal-intencionados não podem adicionar opções e através delas injetarem códigos. Somente as opções definidas que serão aceitas.

Para adaptar a página que criamos anteriormente de forma a deixá-la mais segura, precisamos executar simples passos. Inicialmente vamos remover alguns códigos desnecessários. Observe os códigos destacados em negrito.

<div class="wrap">
<h2>Título da página de opções</h2>
<form method="post" action="options.php">
<?php wp_nonce_field( 'update-options' ); ?>
<table class="form-table">
<tr valign="top">
<th scope="row">Nome da opção</th>
<td>
<input type="text" name="nome_da_opcao" value="<?php echo get_option( 'nome_da_opcao' ); ?>" />
</td>
</tr>
<tr valign="top">
<th scope="row">Nome de outra opção</th>
<td>
<input type="text" name="nome_de_outra_opcao" value="<?php echo
get_option( 'nome_de_outra_opcao' ); ?>" />
</td>
</tr>
</table>
<input type="hidden" name="action" value="update" />
<input type="hidden" name="page_options" value="nome_da_opcao,nome_de_outra_opcao" />
<p class="submit">
<input type="submit" class="button-primary" value="Salvar" />
</p>
</form>
</div>

Agora, a modificação:

<div class="wrap">
<h2>Título da página de opções</h2>
<form method="post" action="options.php">
<table class="form-table">
<tr valign="top">
<th scope="row">Nome da opção</th>
<td>
<input type="text" name="nome_da_opcao" value="<?php echo get_option( 'nome_da_opcao' ); ?>" />
</td>
</tr>
<tr valign="top">
<th scope="row">Nome de outra opção</th>
<td>
<input type="text" name="nome_de_outra_opcao" value="<?php echo
get_option( 'nome_de_outra_opcao' ); ?>" />
</td>
</tr>
</table>
<?php settings_fields( 'nome-do-meu-grupo-de-opcoes' ); ?>
<p class="submit">
<input type="submit" class="button-primary" value="Salvar" />
</p>
</form>
</div>

Observe o uso da função settings_fields(). Com ela não precisamos inserir os campos destacados no código anterior. Essa função requer um parâmetro para o qual defini um nome para meu grupo de opções.

Agora, precisamos definir as opções que serão criadas através da função register_setting(). Essa função precisa ser chamada através do gancho "admin_init". Esse gancho do tipo Action é executado antes de qualquer página da administração ser carregada; em particular a options.php, que recebe os dados do formulário.

Veja como registrar as opções:

<?php
//...
add_action( 'admin_init', 'prefixo_registrar_opcoes' );
function prefixo_registrar_opcoes() {
register_setting( 'nome-do-meu-grupo-de-opcoes', 'nome_da_opcao' );
register_setting( 'nome-do-meu-grupo-de-opcoes', 'nome_de_outra_opcao' );
}
?>

Na função register_setting() informamos o nome do grupo de opções e o nome da opção. Atente-se ao fato da necessidade de informar o mesmo nome do grupo de opções nas funções register_setting() e settings_fields().

É isso, com esse modelo teremos mais segurança em nossas páginas de opções no padrão WordPress. Abraços e até o próximo.

PS. O que você gostaria que abordássemos sobre WordPress? Envie sua sugestão!

Nenhum comentário até agora

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Leandro Vieira trabalha com desenvolvimento web desde 2002. Em 2005, foi convidado para integrar o time de referências profissionais do iMasters. No mesmo ano, lançou o CD-ROM Dreamweaver + PHP + MySQL recordista de vendas do TI SHOP. Em 2006, lançou o CD-ROM Curso Web Sites com AJAX, uma das primeiras referências de Ajax no Brasil. Em 2007 lançou o Curso Interativo Adobe Dreamweaver CS3 abordando as novas funcionalidades e recursos do Dreaweaver CS3. Atualmente, Leandro Vieira é desenvolvedor web, professor do iPED Premier, criador de cursos exclusivos para o TI SHOP, editor do blog leandrovieira.com e cursando Comunicação Social (Publicidade e Propaganda) na UNIVALE.

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.