Adicione a seção (add_settings_section) a uma página customizada (add_submenu_page)

2

Eu tenho uma página de plugins criada com add_submenu_page , eu quero adicionar uma nova seção lá, mas nada acontece:

add_submenu_page('parent', 'Foo', 'Foo', 'manage_options', 'foo-settings', 'anothercallback');
add_settings_section('foo-settings-section', 'Settings', 'acallback', 'foo-settings');

Qual é a chamada certa para usá-lo em uma página personalizada? Você tem um exemplo completo?

    
por thom 22.08.2011 / 21:57

2 respostas

8

A função add_settings_section() simplesmente registra uma seção de formulário com um determinado slug com o WordPress. Para obter a seção e todos os campos que você adicionou a ela para exibir em uma determinada página de menu, você precisa incluir o método do_settings_sections($sections-slug) no retorno de chamada do menu. Isso, é claro, presumindo que você esteja usando a API de configurações, da qual add_settings_section faz parte.

Exemplo:

function plugin_admin_init() {
     //All callbacks must be valid names of functions, even if provided functions are blank
     register_setting( 'option_group', 'option_name', 'sanitize_callback' );
     add_settings_section( 'section_id', 'section_title', 'section_callback', 'section_page_type' );
     add_settings_field( 'field_id', 'field_title', 'field_callback', 'section_page_type', 'section_id' );
}
add_action( 'admin_init', 'plugin_admin_init' );

function add_menus() {
     add_menu_page( 'menu_page_title', 'menu_title', 'menu_capability', 'menu_slug', 'menu_callback');
     add_submenu_page( 'menu_slug', 'submenu_page_title', 'submenu_title', 'submenu_capability', 'submenu_slug', 'submenu_callback' );
}
add_action( 'admin_menu', 'add_menus' );

function submenu_callback() {
     ?>
     <div class='wrap'>
          <h2>Settings</h2>
          <form method='post' action='options.php'>
          <?php 
               /* 'option_group' must match 'option_group' from register_setting call */
               settings_fields( 'option_group' );
               do_settings_sections( 'section_page_type' );
          ?>
               <p class='submit'>
                    <input name='submit' type='submit' id='submit' class='button-primary' value='<?php _e("Save Changes") ?>' />
               </p>
          </form>
     </div>
     <?php
}

Eu fiz o meu melhor para manter todos os nomes de parâmetros únicos, então você deve ser capaz de separá-los e rastrear onde eles vão. A API de configurações é muito específica sobre o que precisa ir onde, portanto, certifique-se de ter tudo isso certo. Além disso, lembre-se de que omiti todas as funções de retorno de chamada deste exemplo, mas na realidade elas são necessárias.

    
por Chiubaka 22.08.2011 / 22:56
1

Este é o seu problema, no seu retorno de chamada add_submenu_page() :

settings_fields( 'option_group' );
do_settings_section( 'section_page_type' );

Para settings_fields() :

  • Você precisa usar o parâmetro $optiongroup passado para register_setting() .

Para do_settings_sections() :

  • A função é do_settings_sections() , não do_settings_section() (nota plural)
  • Você precisa passar o parâmetro $pageid passado para add_submenu_page() .

EDITAR

Er, deixa pra lá. Eu estava respondendo a resposta de outra pessoa, que eu interpretei mal como a marcação da função de retorno de chamada real. As respostas aqui podem ou não se aplicar; ainda precisamos ver o código completo, incluindo retornos de chamada.

    
por Chip Bennett 23.08.2011 / 03:46