Adăugarea unei secțiuni (add_settings_section) pe o pagină personalizată (add_submenu_page)
Am o pagină de plugin creată cu add_submenu_page
, vreau să adaug o nouă secțiune acolo dar nu se întâmplă nimic:
add_submenu_page('parent', 'Foo', 'Foo', 'manage_options', 'foo-settings', 'anothercallback');
add_settings_section('foo-settings-section', 'Setări', 'acallback', 'foo-settings');
Care este apelul corect pentru a o folosi pe o pagină personalizată? Ai un exemplu complet?
Funcția add_settings_section()
înregistrează pur și simplu o secțiune de formular cu un anumit slug în WordPress. Pentru a afișa secțiunea și toate câmpurile adăugate la ea pe o anumită pagină de meniu, trebuie să includeți metoda do_settings_sections($sections-slug)
în callback-ul meniului. Desigur, acest lucru presupune că utilizați API-ul de Setări, din care face parte add_settings_section
.
Exemplu:
function plugin_admin_init() {
//Toate callback-urile trebuie să fie nume valide de funcții, chiar dacă funcțiile furnizate sunt goale
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>Setări</h2>
<form method='post' action='options.php'>
<?php
/* 'option_group' trebuie să se potrivească cu 'option_group' din apelul 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("Salvează modificările") ?>' />
</p>
</form>
</div>
<?php
}
Am încercat să păstrez toate numele de parametri unice, astfel încât să puteți să le identificați și să urmăriți unde se folosesc. API-ul de Setări este foarte specific în ceea ce privește ce trebuie să fie unde, așa că asigurați-vă că aveți totul corect. De asemenea, rețineți că am omis toate funcțiile callback din acest exemplu, dar în realitate ele sunt necesare.

@thom OK, iată un exemplu complet generalizat dintr-un cod funcțional pe care îl am.

Singura situație în care do_settings_sections($sections_slug) nu este necesar, pentru a afișa secțiunile adăugate anterior unei pagini de submeniu, este atunci când adaugi secțiunile tale la o pagină de submeniu existentă, cum ar fi cele din meniul Setări (general, scriere, lectură, discuții, media, legături permanente).

Aceasta este problema ta, în callback-ul tău add_submenu_page()
:
settings_fields( 'option_group' );
do_settings_section( 'section_page_type' );
Pentru settings_fields()
:
- Trebuie să folosești parametrul
$optiongroup
pe care l-ai transmis laregister_setting()
.
Pentru do_settings_sections()
:
- Funcția este
do_settings_sections()
, nudo_settings_section()
(atenție la plural) - Trebuie să transmiți parametrul
$pageid
pe care l-ai transmis laadd_submenu_page()
.
EDITARE
Ah, nu contează. Răspundeam la alt răspuns al cuiva, pe care l-am interpretat greșit ca fiind markup-ul funcției callback. Răspunsurile de aici pot sau nu să se aplice; avem nevoie în continuare să vedem codul complet, inclusiv funcțiile callback.
