Agregar sección (add_settings_section) a una página personalizada (add_submenu_page)

2

Tengo una página de complemento creada con add_submenu_page , quiero agregar una nueva sección allí pero no pasa nada:

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

¿Cuál es la llamada correcta para usarla en una página personalizada? ¿Tienes un ejemplo completo?

    
pregunta thom 22.08.2011 - 21:57

2 respuestas

8

La función add_settings_section() simplemente registra una sección de formulario con un cierto slug con WordPress. Para obtener la sección y todos los campos que ha agregado para mostrar en una determinada página del menú, debe incluir el método do_settings_sections($sections-slug) en la devolución de llamada del menú. Esto es, por supuesto, asumiendo que estás usando la API de configuración, de la que add_settings_section es parte.

Ejemplo:

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
}

Hice todo lo posible por mantener todos los nombres de los parámetros únicos, por lo que debería poder separarlos y rastrear dónde van. La API de configuración se vuelve muy específica acerca de qué debe ir a dónde, así que asegúrese de tenerlo bien. Además, tenga en cuenta que omití todas las funciones de devolución de llamada de este ejemplo, pero en realidad son necesarias.

    
respondido por el Chiubaka 22.08.2011 - 22:56
1

Este es tu problema, en tu devolución de llamada add_submenu_page() :

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

Para settings_fields() :

  • Debe usar el parámetro $optiongroup que pasó a register_setting() .

Para do_settings_sections() :

  • La función es do_settings_sections() , no do_settings_section() (nota plural)
  • Debe pasar el parámetro $pageid que pasó a add_submenu_page() .

EDITAR

Er, no importa. Estaba respondiendo a la respuesta de otra persona, que interpreté erróneamente como el marcado real de la función de devolución de llamada. Las respuestas aquí pueden o no aplicarse; aún necesitamos ver el código completo, incluidas las devoluciones de llamada.

    
respondido por el Chip Bennett 23.08.2011 - 03:46

Lea otras preguntas en las etiquetas