Adăugați câmpuri personalizate multiple în pagina de setări generale
Ceea ce doresc să fac este să adaug câteva câmpuri personalizate la setările generale. Acesta este codul pe care îl folosesc. Funcționează bine, dar nu-mi dau seama cum să adaug mai multe câmpuri.
Aș dori să creez două câmpuri deocamdată, unul pentru numărul de telefon și al doilea pentru adresă:
function register_fields()
{
register_setting('general', 'my_first_field', 'esc_attr');
add_settings_field('my_first_field', '<label for="my_first_field">'.__('Câmpul Meu' , 'my_first_field' ).'</label>' , 'print_custom_field', 'general');
}
function print_custom_field()
{
$value = get_option( 'my_first_field', '' );
echo '<input type="text" id="my_first_field" name="my_first_field" value="' . $value . '" />';
}
add_filter('admin_init', 'register_fields');
Singura modalitate prin care am reușit să îl fac să funcționeze pentru câmpuri multiple a fost să duplic totul.
Așa că arată în felul următor:
function register_fields()
{
register_setting('general', 'my_first_field', 'esc_attr');
add_settings_field('my_first_field', '<label for="my_first_field">'.__('Câmpul Meu' , 'my_first_field' ).'</label>' , 'print_first_field', 'general');
register_setting('general', 'my_second_field', 'esc_attr');
add_settings_field('my_second_field', '<label for="my_second_field">'.__('Câmpul Meu' , 'my_second_field' ).'</label>' , 'print_second_field', 'general');
}
function print_first_field()
{
$value = get_option( 'my_first_field', '' );
echo '<input type="text" id="my_first_field" name="my_first_field" value="' . $value . '" />';
}
function print_second_field()
{
$value = get_option( 'my_second_field', '' );
echo '<input type="text" id="my_second_field" name="my_second_field" value="' . $value . '" />';
}
add_filter('admin_init', 'register_fields');
Dar aceasta probabil nu este cea mai bună modalitate de a o face, am încercat să creez un settings_section
dar pur și simplu nu a funcționat sau nu s-a salvat etc. Este foarte confuz.

A doua bucată de cod este tehnic modul corect de a face acest lucru. Cu toate acestea, la sfârșitul funcției add_settings_field()
puteți pasa argumente.
Vă rugăm să consultați referința funcției WordPress Add_Settings_Field. Acest lucru vă va ajuta să înțelegeți mai bine cum funcționează cu adevărat funcția add_settings_field()
.
Acum, având în vedere acest lucru, ați putea folosi o funcție 'partajată' pentru callback-ul dvs. Așa procedez și eu în pagina de opțiuni atunci când dezvolt teme.
Iată un exemplu despre cum procedez.
// Câmpurile mele exemplu
add_settings_field(
'tutorial_display_count',
'Număr afișare tutoriale',
'ch_essentials_textbox_callback',
'ch_essentials_front_page_option',
'ch_essentials_front_page',
array(
'tutorial_display_count' // $args pentru callback
)
);
add_settings_field(
'blog_display_count',
'Număr afișare articole',
'ch_essentials_textbox_callback',
'ch_essentials_front_page_option',
'ch_essentials_front_page',
array(
'blog_display_count' // $args pentru callback
)
);
// Callback-ul partajat
function ch_essentials_textbox_callback($args) {
$options = get_option('ch_essentials_front_page_option');
echo '<input type="text" id="' . $args[0] . '" name="ch_essentials_front_page_option[' . $args[0] . ']" value="' . $options['' . $args[0] . ''] . '">';
}
Va trebui să faceți puțină personalizare pentru a se potrivi nevoilor dumneavoastră, dar utilizarea unei funcții partajate pentru callback-uri vă va economisi mult spațiu în ceea ce privește codul. În afară de asta, procedați corect așa cum faceți acum.
--Editare--
Ok, iată cum ar trebui să arate pentru dumneavoastră... doar modificați codul după cum este necesar, l-am scris pe loc... l-am testat pentru a verifica și a funcționat. Trebuie doar să modificați add_settings_field
(s) pentru a se potrivi nevoilor dumneavoastră. Dacă trebuie să adăugați mai multe, doar copiați și lipiți unul și editați-l. Asigurați-vă că utilizați register_setting
altfel nu va funcționa.
add_action('admin_init', 'my_general_section');
function my_general_section() {
add_settings_section(
'my_settings_section', // ID-ul secțiunii
'Titlul opțiunilor mele', // Titlul secțiunii
'my_section_options_callback', // Callback
'general' // Pe ce pagină? Acest lucru face ca secțiunea să apară pe pagina de Setări Generale
);
add_settings_field( // Opțiunea 1
'option_1', // ID-ul opțiunii
'Opțiunea 1', // Etichetă
'my_textbox_callback', // !important - Aici merg argumentele!
'general', // Pagina pe care va fi afișată (Setări Generale)
'my_settings_section', // Numele secțiunii noastre
array( // Argumentele $args
'option_1' // Ar trebui să se potrivească cu ID-ul opțiunii
)
);
add_settings_field( // Opțiunea 2
'option_2', // ID-ul opțiunii
'Opțiunea 2', // Etichetă
'my_textbox_callback', // !important - Aici merg argumentele!
'general', // Pagina pe care va fi afișată
'my_settings_section', // Numele secțiunii noastre (Setări Generale)
array( // Argumentele $args
'option_2' // Ar trebui să se potrivească cu ID-ul opțiunii
)
);
register_setting('general','option_1', 'esc_attr');
register_setting('general','option_2', 'esc_attr');
}
function my_section_options_callback() { // Callback-ul secțiunii
echo '<p>Un mic mesaj despre editarea informațiilor</p>';
}
function my_textbox_callback($args) { // Callback-ul casetei de text
$option = get_option($args[0]);
echo '<input type="text" id="'. $args[0] .'" name="'. $args[0] .'" value="' . $option . '" />';
}

Deci ceea ce nu înțeleg sunt parametrii 4 și 5 din add_settings_field(). Știu că primul este ID-ul, al doilea este numele, al treilea este callback-ul pentru afișare, dar pentru ce sunt următorii?
Tu ai ch_essentials_front_page_option pentru amândoi, eu am doar 'general' în același loc, următorul este gol și ultimul este acum array-ul args.
Deci acum în callback ai get_option cu acea valoare, dar nu știu ce să pun acolo în cazul meu.

Am făcut o modificare, asta ar trebui să te pună pe drumul cel bun 100%. Spune-mi dacă ai probleme sau întrebări. Am comentat destul de mult codul.

@MrJusting Mulțumesc mult. De fapt am reușit să îl fac să funcționeze uitându-mă la profilul tău și verificând o întrebare la care ai răspuns, "Implementing-tabs-on-custom-menu-page". Era foarte bine comentat, așa că am comparat codul meu și în sfârșit am înțeles cum funcționează. Pentru mine parametrii page și section erau confuzi, credeam că e vorba de secțiunea paginii și nu de secțiunea de setări. Acum i-am combinat pe amândouă și am adăugat o altă valoare la $args, prima este id-ul câmpului și a doua este descrierea, apoi am adăugat o altă linie la funcția callback pentru a afișa descrierea cu args[1] :)

Super, mă bucur că ai reușit să rezolvi. Dacă mai ai întrebări, spune-mi.

Cred că voi încerca acum să creez o pagină de meniu separată și să adaug opțiunile acolo, pentru că în general și la fund este cam pierdut. O să te anunț cum a mers.

Codul din acesta este în regulă? http://wordpress.stackexchange.com/questions/127493/wordpress-settings-api-implementing-tabs-on-custom-menu-page

Mulțumesc @MrJustin. Doar o observație, pentru ceva ce nu am văzut în răspuns...pentru a afișa opțiunea în tema ta, folosește funcția get_option()
. Exemplu: <?php echo get_option('option_1') ;?>

O metodă mai bună este utilizarea unui plugin pentru opțiuni în WordPress. Unul dintre cele mai bune este Advanced Custom Fields.
http://www.advancedcustomfields.com/
Dacă achiziționezi un addon pentru pagini de opțiuni, poți crea un număr nelimitat de pagini de opțiuni cu multe funcționalități. Te rugăm să urmărești un videoclip.
http://www.advancedcustomfields.com/add-ons/options-page/
Plugin și addon foarte utile.

Vreau doar să adaug câteva câmpuri, așa că un plugin doar pentru asta ar fi exagerat pentru mine, dar mulțumesc.
