it-swarm.com.de

Abschnitt (add_settings_section) zu einer benutzerdefinierten Seite hinzufügen (add_submenu_page)

Ich habe eine Plugin-Seite mit add_submenu_page erstellt. Ich möchte dort einen neuen Abschnitt hinzufügen, aber es passiert nichts:

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

Was ist der richtige Aufruf, um es in einer benutzerdefinierten Seite zu verwenden? Haben Sie ein vollständiges Beispiel?

3
thom

Die Funktion add_settings_section() registriert einfach einen Formularabschnitt mit einem bestimmten Slug in WordPress. Damit der Abschnitt und alle von Ihnen hinzugefügten Felder auf einer bestimmten Menüseite angezeigt werden, müssen Sie die Methode do_settings_sections($sections-slug) in den Rückruf des Menüs aufnehmen. Dies setzt natürlich voraus, dass Sie die Einstellungs-API verwenden, zu der add_settings_section gehört.

Beispiel:

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
}

Ich habe mein Bestes getan, um alle Parameternamen eindeutig zu halten, damit Sie sie auseinander nehmen und verfolgen können, wohin sie gehen. Die Einstellungs-API legt sehr genau fest, was wohin benötigt wird. Stellen Sie also sicher, dass alles in Ordnung ist. Denken Sie auch daran, dass ich in diesem Beispiel alle Rückruffunktionen weggelassen habe, aber in Wirklichkeit sind sie notwendig.

10
Chiubaka

Dies ist Ihr Problem in Ihrem add_submenu_page()-Rückruf:

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

Für settings_fields():

  • Sie müssen den Parameter $optiongroup verwenden, den Sie an register_setting() übergeben haben.

Für do_settings_sections():

  • Die Funktion ist do_settings_sections(), not do_settings_section() (note plural)
  • Sie müssen den Parameter $pageid übergeben, den Sie an add_submenu_page() übergeben haben.

BEARBEITEN

Äh, egal. Ich habe auf die Antwort einer anderen Person geantwortet, die ich als das eigentliche Markup der Rückruffunktion falsch verstanden habe. Die hier gegebenen Antworten können zutreffen oder auch nicht. Wir müssen immer noch den vollständigen Code sehen, einschließlich der Rückrufe.

1
Chip Bennett