Aggiungere una sezione (add_settings_section) a una pagina personalizzata (add_submenu_page)

22 ago 2011, 22:57:37
Visualizzazioni: 13.8K
Voti: 5

Ho una pagina del plugin creata con add_submenu_page, voglio aggiungere una nuova sezione ma non succede nulla:

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

Qual è la chiamata corretta per usarla in una pagina personalizzata? Avete un esempio completo?

5
Commenti

Hai una funzione "acallback" definita?

tollmanz tollmanz
22 ago 2011 23:12:56

Sì, l'ho definita.

thom thom
22 ago 2011 23:30:10

Ricevi qualunque output? Cioè, vedi il testo di callback del tuo add_settings_section() nell'output? Come è definita la tua callback di add_submenu_page()? Possiamo vedere quel codice?

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

In realtà ho utilizzato una definizione di funzione inline (param, function () { echo 'qui'; }, param); Sto eseguendo PHP 5.3. Grazie

thom thom
22 ago 2011 23:45:49

Puoi postare tutto il codice rilevante? Altrimenti sarà incredibilmente difficile capire dove sia il problema.

Chip Bennett Chip Bennett
23 ago 2011 02:04:05
Tutte le risposte alla domanda 2
4
13

La funzione add_settings_section() registra semplicemente una sezione del modulo con un determinato slug in WordPress. Per visualizzare la sezione e tutti i campi che hai aggiunto ad essa in una determinata pagina del menu, devi includere il metodo do_settings_sections($sections-slug) nel callback del menu. Questo, ovviamente, presuppone che tu stia utilizzando l'API delle impostazioni, di cui add_settings_section fa parte.

Esempio:

function plugin_admin_init() {
     // Tutti i callback devono essere nomi validi di funzioni, anche se le funzioni fornite sono vuote
     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>Impostazioni</h2>
          <form method='post' action='options.php'>
          <?php 
               /* 'option_group' deve corrispondere a 'option_group' dalla chiamata 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("Salva modifiche") ?>' />
               </p>
          </form>
     </div>
     <?php
}

Ho fatto del mio meglio per mantenere tutti i nomi dei parametri univoci, in modo da poterli distinguere e tracciare dove vanno. L'API delle impostazioni è molto specifica su ciò che deve andare dove, quindi assicurati di averlo tutto corretto. Inoltre, tieni presente che ho omesso tutte le funzioni di callback da questo esempio, ma nella realtà sono necessarie.

22 ago 2011 23:56:26
Commenti

Anch'io ho questa chiamata :(

thom thom
23 ago 2011 00:16:31

@thom Ok, ecco un esempio completo generalizzato da un codice funzionante che ho.

Chiubaka Chiubaka
23 ago 2011 02:09:53

Grazie. Il problema era con il parametro di do_settings_section.

thom thom
23 ago 2011 14:16:02

L'unica situazione in cui do_settings_sections($sections_slug) non è necessario, per mostrare le sezioni precedentemente aggiunte a una pagina di sottomenu, è quando aggiungi le tue sezioni a una pagina di sottomenu preesistente, come quelle nel menu Impostazioni (generale, scrittura, lettura, discussione, media, permalink).

aldemarcalazans aldemarcalazans
11 apr 2019 03:41:10
0

Questo è il tuo problema, nella tua callback di add_submenu_page():

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

Per settings_fields():

  • Devi utilizzare il parametro $optiongroup che hai passato a register_setting().

Per do_settings_sections():

  • La funzione è do_settings_sections(), non do_settings_section() (nota il plurale)
  • Devi passare il parametro $pageid che hai passato a add_submenu_page().

MODIFICA

Ehm, lascia perdere. Stavo rispondendo alla risposta di qualcun altro, che ho letto male pensando fosse il markup effettivo della funzione di callback. Le risposte qui potrebbero o meno essere applicabili; abbiamo ancora bisogno di vedere il codice completo, inclusi i callback.

23 ago 2011 04:46:00