только последняя опция в настройках темы сохраняется в базе данных - PullRequest
0 голосов
/ 29 марта 2020

У меня есть функции этой страницы администратора, где я пытаюсь запросить у администратора некоторые текстовые данные.

проблема в том, что только последнее поле сохраняется и существует в БД, верхние из них вообще не существуют в БД.

добавление параметров на страницу администратора:

 register_setting( 'top-data-group', 'yourLogo');
 register_setting( 'card1-group', 'card1_text');
 register_setting( 'card4-group', 'card4_text');


  add_settings_section('top-options', 'Top Information', 'top_options', 'top-data' );
  add_settings_section('card1', 'Card 1', 'card1_options', 'top-data' );
  add_settings_section('card4', 'Card 4', 'top_options', 'top-data' );


 add_settings_field('yourLogo', 'Logo Image URL:', 'yourLogoImage_callback', 'top-data', 'top-options'  );
 add_settings_field('card1_text', 'card 1 text:', 'card1_text_callback', 'top-data', 'card1'  );
 add_settings_field('card4_text', 'card 4 text:', 'card4_text_callback', 'top-data', 'card4'  );

функции обратного вызова:


function card1_text_callback (){
    $preText =  esc_attr( get_option('card1_text'));
     echo ' <input type="text" name="card1_text" placeholder="card text" size="50" value="'.$preText. '" > ';
 }


function card4_text_callback (){
    $preText =  esc_attr( get_option('card4_text'));
     echo ' <input type="text" name="card4_text" placeholder="card text" size="50" value="'.$preText. '" > ';
 }

function yourLogoImage_callback (){
    $preText =  esc_attr( get_option('yourLogoImage'));
     echo ' <input type="text" name="yourLogoImage" placeholder="your Logo Image URL" size="50" value="'.$preText. '" > <p> use external or internal image url , preferred (300 * 50 px) </p>'   ;
 }

страница формы:

<h1> Top Section </h1>
<?php settings_errors(); ?>


<form action="options.php" method="post" >  
    <?php 


    settings_fields('top-data-group');
    do_settings_sections('top-data');

    settings_fields('card1-group');
    do_settings_sections('card1');

    settings_fields('card4-group');
    do_settings_sections('card4');

    submit_button('save', 'primary sub-button', 'submit', true);

  ?>
</form>

сохраняется только последняя опция в БД, все верхние пустые. форма работает нормально, я могу найти все, как я хочу в приборной панели, но они не сохранили в DB

edit:

register_setting() соответствует add_setting_field() id .. I ' мы сделали то же самое с card4, и он работает.

1 Ответ

0 голосов
/ 29 марта 2020

Я решаю это следующим образом:

1- regester_setting() идентификатор не должен совпадать с любым другим идентификатором, и это идентификатор, который вы должны использовать в функции обратного вызова.

2- вам не нужно использовать идентификатор add_setting_field() в любом месте.

3 - поместить все разделы в одну группу параметров.

4 - страница внутри add_settings_section() и add_setting_field() должен соответствовать фрагменту страницы, который отображается с помощью add_menu_page() или add_submenu_page().

, поэтому код теперь выглядит следующим образом:

добавление параметров на страницу администратора:

change : удаляются все параметры группы, только один сохраняется и добавляется к каждому regester_settings(). изменен фрагмент страницы для соответствия странице в функциях обратного вызова add_settings_field().


    add_submenu_page('top', 'top', 'top', 'manage_options', 'top-data', 'top_init' );


 register_setting( 'top-data-group', 'yourLogo');
 register_setting( 'top-data-group', 'card1_text');
 register_setting( 'top-data-group', 'card4_text');


  add_settings_section('top-options', 'Top Information', 'top_options', 'top-data' );
  add_settings_section('card1', 'Card 1', 'card1_options', 'top-data' );
  add_settings_section('card4', 'Card 4', 'top_options', 'top-data' );


 add_settings_field('random3', 'Logo Image URL:', 'yourLogoImage_callback', 'top-data', 'top-options'  );
 add_settings_field('crandom1', 'card 1 text:', 'card1_text_callback', 'top-data', 'card1'  );
 add_settings_field('random2', 'card 4 text:', 'card4_text_callback', 'top-data', 'card4'  );

:

change: изменен get_options() и name= свойства для соответствия идентификаторам на regester_settings()


function card1_text_callback (){
    $preText =  esc_attr( get_option('card1_text'));
     echo ' <input type="text" name="card1_text" placeholder="card text" size="50" value="'.$preText. '" > ';
 }


function card4_text_callback (){
    $preText =  esc_attr( get_option('card4_text'));
     echo ' <input type="text" name="card4_text" placeholder="card text" size="50" value="'.$preText. '" > ';
 }

function yourLogoImage_callback (){
    $preText =  esc_attr( get_option('yourLogo'));
     echo ' <input type="text" name="yourLogoImage" placeholder="your Logo Image URL" size="50" value="'.$preText. '" > <p> use external or internal image url , preferred (300 * 50 px) </p>'   ;
 }

страница формы:

изменить: удалить каждый параметр группы, только один сохраненный.

<h1> Top Section </h1>
<?php settings_errors(); ?>


<form action="options.php" method="post" >  
    <?php 


    settings_fields('top-data-group');
    do_settings_sections('top-data');



    submit_button('save', 'primary sub-button', 'submit', true);

  ?>
</form>
...