Depois que vimos na Parte 1 como podemos criar uma configuração e um campo para ser exibido em uma página de configuração já existente no WordPress, nesta parte 2 vamos aprender a criar uma página só para os nossos campos. Assiste (e/ou) lê aí!
- Parte 1: Como criar e validar seus campos com a API de configurações do WordPress
- Parte 2: Como criar seções e páginas no Painel do WP
Como criar uma seção de configurações no WordPress
Antes de criar a sua página de configurações você precisa entender o que é uma seção de configuração no WordPress. Na página de Escrita do WordPress, você vai perceber que há o subtítulo Publicar por e-mail. Este subtítulo server para demarcar uma seção daquela página.
Para criar uma nova seção, vamos usar a função add_settings_section(). Editando o código da parte 1 (omitindo os trechos que não precisam ser alterados) temos algo assim:
function minhas_configuracoes() { register_setting( 'writing', ... // Aqui nada muda. ); add_settings_section( 'minha_secao', 'Minha seção', null, 'writing' ); add_settings_field( ... 'writing', 'minha_secao', // Aqui alteramos a seção onde o campo será exibido. ... ); } add_action( 'admin_init', 'minhas_configuracoes' );

Como criar uma nova página de configurações no WordPress
O WordPress tem várias funções para adicionar novas páginas ao Painel: add_menu_page()
para páginas de primeiro nível, add_submenu_page()
para segundo nível, add_options_page()
para páginas de segundo nível dentro do item Configurações e por aí vai. Para o nosso exemplo vamos usar a add_options_page()
.
Novas páginas devem ser criadas com o hook admin_menu
. A criação da nossa página fica mais ou menos assim:
function minhas_configuracoes_menu() { add_options_page( 'Minhas configurações', // Título da página 'Minhas config.', // Nome no menu do Painel 'manage_options', // Permissões necessárias 'minhas-configuracoes', // Valor do parâmetro "page" no URL 'minhas_configuracoes_html' // Função que imprime o conteúdo da página ); } add_action( 'admin_menu', 'minhas_configuracoes_menu' ); function minhas_configuracoes_html() { ?> <div class="wrap"> <h1><?php echo esc_html( get_admin_page_title() ); ?></h1> <form action="options.php" method="post"> <?php settings_fields( 'grupo_minhas_configuracoes' ); do_settings_sections( 'grupo_minhas_configuracoes' ); submit_button(); ?> </form> </div> <?php }
A função minhas_configuracoes_html()
possui uma estrutura básica, somente chamado funções do WordPress que montam a página da forma correta.
Perceberam o valor passado para as funções settings_fields()
e do_settings_sections()
? Este é o valor do “grupo” que vimos na Parte 1. Precisamos alterar o código de criação da configuração e do campo para que eles sejam exibidos no lugar correto.
O código final fica assim:
function minhas_configuracoes() { register_setting( 'grupo_minhas_configuracoes', 'chave_api_minha_integracao', array( 'sanitize_callback' => function( $value ) { if ( ! preg_match( '/API-[0-9]{4}-[A-Z]{3}/', $value ) ) { add_settings_error( 'chave_api_minha_integracao', esc_attr( 'chave_api_minha_integracao_erro' ), 'Chave API no formato errado.', 'error' ); return get_option( 'chave_api_minha_integracao' ); } return $value; }, ) ); add_settings_section( 'minha_secao', 'Minha seção', function( $args ) { echo '<p>Coloque aqui a sua chave API.</p>'; }, 'grupo_minhas_configuracoes' ); add_settings_field( 'chave_api_minha_integracao', 'Chave API da minha integração', function( $args ) { $options = get_option( 'chave_api_minha_integracao' ); ?> <input type="text" id="<?php echo esc_attr( $args['label_for'] ); ?>" name="chave_api_minha_integracao" value="<?php echo esc_attr( $options ); ?>"> <?php }, 'grupo_minhas_configuracoes', 'minha_secao', [ 'label_for' => 'chave_api_minha_integracao_html_id', 'class' => 'classe-html-tr', ] ); } add_action( 'admin_init', 'minhas_configuracoes' ); function minhas_configuracoes_menu() { add_options_page( 'Minhas configurações', 'Minhas config.', 'manage_options', 'minhas-configuracoes', 'minhas_configuracoes_html' ); } add_action( 'admin_menu', 'minhas_configuracoes_menu' ); function minhas_configuracoes_html() { ?> <div class="wrap"> <h1><?php echo esc_html( get_admin_page_title() ); ?></h1> <form action="options.php" method="post"> <?php settings_fields( 'grupo_minhas_configuracoes' ); do_settings_sections( 'grupo_minhas_configuracoes' ); submit_button(); ?> </form> </div> <?php }
Bônus: Como adicinar um link “Configurações” na lista de plugins
Sabem aquele link de Configurações que a gente vê em alguns plugins?

Esses links são criados pelos filtros plugin_action_links
e plugin_action_links_{$plugin_file}
. Para simplificar, vamos usar o último:
function minhas_configuracoes_link_lista_plugins( $links ) { $settings_link = '<a href="options-general.php?page=minhas-configuracoes">Configurações</a>'; array_unshift( $links, $settings_link ); return $links; } $plugin = plugin_basename( __FILE__ ); add_filter( "plugin_action_links_$plugin", 'minhas_configuracoes_link_lista_plugins' );
Se vocẽ gostou desta série não esqueça de compartilhar com os seus amigos, assinar o canal e a newsletter aqui embaixo!
Show de bola, estou criando meu primeiro plugin na vida e já me ajudou a dar um passo grande.
Felipe Elia, primeiro parabéns pelo post muito esclarecedor.
Estava buscando uma opção para melhorar uma aplicação e seu post me ajudou muito!
Uma duvida que surgiu é sobre como usar o submenu, por exemplo gostaria de alterar o aspecto da pagina (profile.php) ou acrescentar novos campos tipo um mini curriculum.
Conhece algum material que possa me ajudar nisso?
Felipe boa noite, acha que é possível criar um plugin para método de pagamento no WP ?