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!
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.