Añadir sección (add_settings_section) a una página personalizada (add_submenu_page)

22 ago 2011, 22:57:37
Vistas: 13.8K
Votos: 5

Tengo una página de plugin creada con add_submenu_page, quiero añadir una nueva sección ahí pero no ocurre nada:

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

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

5
Comentarios

¿Tienes definida una función "acallback"?

tollmanz tollmanz
22 ago 2011 23:12:56

Sí, la tengo definida.

thom thom
22 ago 2011 23:30:10

¿Obtienes alguna salida? Es decir, ¿obtienes el texto de retorno de tu add_settings_section()? ¿Cómo está definido tu callback de add_submenu_page()? ¿Podemos ver ese código?

Chip Bennett Chip Bennett
22 ago 2011 23:42:20

De hecho he usado una definición de función en línea (param, function () { echo 'aquí'; }, param); Estoy ejecutando PHP 5.3. Gracias

thom thom
22 ago 2011 23:45:49

¿Puedes publicar todo el código relevante? De lo contrario, será increíblemente difícil descubrir dónde está el problema.

Chip Bennett Chip Bennett
23 ago 2011 02:04:05
Todas las respuestas a la pregunta 2
4
13

La función add_settings_section() simplemente registra una sección de formulario con un slug específico en WordPress. Para que la sección y todos los campos que hayas añadido a ella se muestren en una página de menú específica, necesitas incluir el método do_settings_sections($sections-slug) en el callback del menú. Esto, por supuesto, asumiendo que estás utilizando la API de Ajustes, de la cual add_settings_section forma parte.

Ejemplo:

function plugin_admin_init() {
     // Todos los callbacks deben ser nombres válidos de funciones, incluso si las funciones proporcionadas están vacías
     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>Ajustes</h2>
          <form method='post' action='options.php'>
          <?php 
               /* 'option_group' debe coincidir con 'option_group' de la llamada register_setting */
               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("Guardar cambios") ?>' />
               </p>
          </form>
     </div>
     <?php
}

Hice mi mejor esfuerzo para mantener todos los nombres de parámetros únicos, así que deberías poder distinguirlos y rastrear dónde van. La API de Ajustes es muy específica sobre lo que debe ir dónde, así que asegúrate de tener todo correcto. Además, ten en cuenta que omití todas las funciones de callback en este ejemplo, pero en realidad son necesarias.

22 ago 2011 23:56:26
Comentarios

Yo también tengo esta llamada :(

thom thom
23 ago 2011 00:16:31

@thom Ok, aquí tienes un ejemplo completo generalizado de un código funcional que tengo.

Chiubaka Chiubaka
23 ago 2011 02:09:53

Gracias. El problema estaba con el parámetro de do_settings_section.

thom thom
23 ago 2011 14:16:02

La única situación donde do_settings_sections($sections_slug) no es necesario, para mostrar secciones previamente añadidas a una página de submenú, es cuando añades tus secciones a una página de submenú preexistente, como las que están en el menú de Configuración (general, escritura, lectura, discusión, medios, enlaces permanentes).

aldemarcalazans aldemarcalazans
11 abr 2019 03:41:10
0

Este es tu problema, en tu callback de add_submenu_page():

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

Para settings_fields():

  • Necesitas usar el parámetro $optiongroup que pasaste a register_setting().

Para do_settings_sections():

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

EDITAR

Eh, olvídalo. Estaba respondiendo a la respuesta de otra persona, que leí mal como si fuera el marcado real de la función callback. Las respuestas aquí pueden o no aplicar; todavía necesitamos ver el código completo, incluyendo los callbacks.

23 ago 2011 04:46:00