web-dev-qa-db-fra.com

Ajouter une section (add_settings_section) à une page personnalisée (add_submenu_page)

J'ai une page de plugin créée avec add_submenu_page, je veux ajouter une nouvelle section mais rien ne se passe:

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

Quel est le bon appel pour l'utiliser dans une page personnalisée? Avez-vous un exemple complet?

3
thom

La fonction add_settings_section() enregistre simplement une section de formulaire avec un certain slug avec WordPress. Pour que la section et tous les champs que vous avez ajoutés soient affichés sur une page de menu donnée, vous devez inclure la méthode do_settings_sections($sections-slug) dans le rappel du menu. Ceci, bien sûr, en supposant que vous utilisiez l’API de configuration, dont add_settings_section fait partie.

Exemple:

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
}

J'ai fait de mon mieux pour que tous les noms de paramètres soient uniques, vous devriez donc pouvoir les séparer et tracer où ils vont. L'API de paramètres devient très spécifique sur ce qui doit être fait où, alors assurez-vous que tout est en ordre. N'oubliez pas non plus que j'ai omis toutes les fonctions de rappel de cet exemple, mais qu'elles sont en réalité nécessaires.

10
Chiubaka

C'est votre problème, dans votre callback add_submenu_page():

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

Pour settings_fields():

  • Vous devez utiliser le paramètre $optiongroup que vous avez passé à register_setting().

Pour do_settings_sections():

  • La fonction est do_settings_sections(), pas do_settings_section() (note au pluriel)
  • Vous devez transmettre le paramètre $pageid que vous avez transmis à add_submenu_page().

MODIFIER

Euh, tant pis. Je répondais à la réponse de quelqu'un d'autre, ce que j'ai mal interprété en tant que balisage de la fonction de rappel. Les réponses ici peuvent ou peuvent ne pas s'appliquer; nous avons toujours besoin de voir le code complet, y compris les rappels.

1
Chip Bennett