Adăugarea unei secțiuni (add_settings_section) pe o pagină personalizată (add_submenu_page)

22 aug. 2011, 22:57:37
Vizualizări: 13.8K
Voturi: 5

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?

5
Comentarii

Ai definit o funcție "acallback"?

tollmanz tollmanz
22 aug. 2011 23:12:56

Da, am definit-o.

thom thom
22 aug. 2011 23:30:10

Primești vreo ieșire? Adică, vezi textul din callback-ul tău add_settings_section() afișat? Cum este definit callback-ul tău add_submenu_page()? Putem vedea acel cod?

Chip Bennett Chip Bennett
22 aug. 2011 23:42:20

De fapt, am folosit o definiție de funcție inline (param, function () { echo 'aici'; }, param); Rulez PHP 5.3. Mulțumesc

thom thom
22 aug. 2011 23:45:49

Poți posta tot codul relevant? Altfel, va fi incredibil de greu să identificăm unde este problema.

Chip Bennett Chip Bennett
23 aug. 2011 02:04:05
Toate răspunsurile la întrebare 2
4
13

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.

22 aug. 2011 23:56:26
Comentarii

Și eu am această problemă :(

thom thom
23 aug. 2011 00:16:31

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

Chiubaka Chiubaka
23 aug. 2011 02:09:53

Mulțumesc. Problema era cu parametrul funcției do_settings_section.

thom thom
23 aug. 2011 14:16:02

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

aldemarcalazans aldemarcalazans
11 apr. 2019 03:41:10
0

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 la register_setting().

Pentru do_settings_sections():

  • Funcția este do_settings_sections(), nu do_settings_section() (atenție la plural)
  • Trebuie să transmiți parametrul $pageid pe care l-ai transmis la add_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.

23 aug. 2011 04:46:00