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"><br /><h2>Título da página de opções</h2><br /><form method="post" action="options.php"><br /><?php wp_nonce_field( 'update-options' ); ?><br /><table class="form-table"><br /><tr valign="top"><br /><th scope="row">Nome da opção</th><br /><td><br /><input type="text" name="nome_da_opcao" value="<?php echo get_option( 'nome_da_opcao' ); ?>" /><br /></td><br /></tr><br /><tr valign="top"><br /><th scope="row">Nome de outra opção</th><br /><td><br /><input type="text" name="nome_de_outra_opcao" value="<?php echo<br />get_option( 'nome_de_outra_opcao' ); ?>" /><br /></td><br /></tr><br /></table><br /><strong><input type="hidden" name="action" value="update" /></strong><br /><strong><input type="hidden" name="page_options" value="nome_da_opcao,nome_de_outra_opcao" /></strong><br /><p class="submit"><br /><input type="submit" class="button-primary" value="Salvar" /><br /></p><br /></form><br /></div>Agora, a modificação:
<div class="wrap"><br /><h2>Título da página de opções</h2><br /><form method="post" action="options.php"><br /><table class="form-table"><br /><tr valign="top"><br /><th scope="row">Nome da opção</th><br /><td><br /><input type="text" name="nome_da_opcao" value="<?php echo get_option( 'nome_da_opcao' ); ?>" /><br /></td><br /></tr><br /><tr valign="top"><br /><th scope="row">Nome de outra opção</th><br /><td><br /><input type="text" name="nome_de_outra_opcao" value="<?php echo<br />get_option( 'nome_de_outra_opcao' ); ?>" /><br /></td><br /></tr><br /></table><br /><strong><?php settings_fields( 'nome-do-meu-grupo-de-opcoes' ); ?></strong><br /><p class="submit"><br /><input type="submit" class="button-primary" value="Salvar" /><br /></p><br /></form><br /></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<br />//...<br />add_action( 'admin_init', 'prefixo_registrar_opcoes' );<br />function prefixo_registrar_opcoes() {<br />register_setting( 'nome-do-meu-grupo-de-opcoes', 'nome_da_opcao' );<br />register_setting( 'nome-do-meu-grupo-de-opcoes', 'nome_de_outra_opcao' );<br />}<br />?>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!








