Aggiungere una sezione (add_settings_section) a una pagina personalizzata (add_submenu_page)
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?

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.

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

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).

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 aregister_setting()
.
Per do_settings_sections()
:
- La funzione è
do_settings_sections()
, nondo_settings_section()
(nota il plurale) - Devi passare il parametro
$pageid
che hai passato aadd_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.
