it-swarm.com.ru

Передача массива в add_option ()

Я должен создать страницу параметров в моей собственной теме WordPress. вот пример кода

<?php

    function bguru_register_settings(){

   $default_options=array(
        'bguru_logo'=>'http://templategraphy.com/demo/businessguru/images/logo.png',
        'bguru_vimeo'=>'',
        'bguru_skype'=>'',
        'bguru_dribbble'=>'',
        'bguru_slide_one_image'=>'',
        'bguru_slide_one_heading'=>'',
        'bguru_slide_one_text'=>''
         );

        add_option('bguru_options',$default_options);

        register_setting('tgbusinessguru', 'bguru_options');
    }

    add_action('admin_init', 'bguru_register_settings');

    function bguru_register_options_page(){

    add_theme_page('Business Guru Options', 'Theme Customizer', 'edit_theme_options', 'bguru-options', 'bguru_options_page');

}

    add_action('admin_menu', 'bguru_register_options_page');

    function bguru_options_page(){
        $options=get_option('bguru_options');

        ?>
<div class="wrap">
    <?php
 screen_icon(); ?>
    <h1>Business Guru Options</h1>
    <form method="post" action="options.php"> 
        <?php
 settings_fields('tgbusinessguru'); ?>
            <table class="form-table">
                <tr valign="top">
                    <th><h2>General</h2><th>
                </tr>
                <tr valign="top">

                    <th scope="row"><label for="bguru_logo">Logo:</label></th>

                    <td><input type="text" id="bguru_logo" size="50" name="bguru_options[bguru_logo]" value="<?php echo $options['bguru_logo']; ?>" /></td>

                </tr>

                <tr valign="top">
                    <th><h2>Social Links</h2><th>
                </tr>
                <tr valign="top">
                    <th scope="row"><label for="bguru_vimeo">Vimeo:</label></th>
                    <td><input type="text" id="bguru_vimeo" size="50" name="bguru_options[bguru_vimeo]" value="<?php echo $options['bguru_vimeo']; ?>" /></td>

                 </tr>
                <tr valign="top">
                    <th scope="row"><label for="bguru_skype">Skype:</label></th>
                    <td><input type="text" id="bguru_skype" size="50" name="bguru_options[bguru_skype]" value="<?php echo $options['bguru_skype']; ?>" /></td>
                </tr>
                <tr valign="top">
                    <th scope="row"><label for="bguru_dribbble">Dribbble:</label></th>
                    <td><input type="text" id="bguru_dribbble" size="50" name="bguru_options[bguru_dribbble]" value="<?php echo $options['bguru_dribbble']; ?>" /></td>
                </tr>
                <tr valign="top">

                    <th scope="row"><label for="bguru_slide_one_image">Image:</label></th>

                    <td><input type="text" id="bguru_slide_one_image" size="50" name="bguru_options[bguru_slide_one_image]" value="<?php
 echo $options['bguru_slide_one_image']; ?>" /></td>
                </tr>
                <tr valign="top">
                    <th scope="row"><label for="bguru_slide_one_heading">Heading:</label></th>
                    <td><input type="text" id="bguru_slide_one_heading" size="50" name="bguru_options[bguru_slide_one_heading]" value="<?php
 echo $options['bguru_slide_one_heading']; ?>" /></td>
                </tr>
                <tr valign="top">
                    <th scope="row"><label for="bguru_slide_one_text">Description:</label></th>
                    <td><textarea type="text" id="bguru_slide_one_text" style="width:439px;height:100px;" name="bguru_options[bguru_slide_one_text]"><?php  echo $options['bguru_slide_one_text']; ?></textarea></td>
                </tr>
              </table>
          <?php submit_button(); ?>
       </form>
     </div>
<?php  } ?>

Все детали формы передаются с помощью панели управления. Я хочу, чтобы администратор забыл заполнить поле логотипа, тогда по умолчанию это работает $ default_options, поэтому по умолчанию поле логотипа заполняется, но когда я пытаюсь получить доступ к массиву с помощью get_option, я не получаю результаты. ожидать.

1
Payal

Я думаю, что вы добавили опцию bguru_options раньше. Если bguru_options уже существует, add_option() ничего не делает. Чтобы изменить значение существующих параметров, вы должны использовать update_option() вместо этого.

РЕДАКТИРОВАТЬ

Я подтверждаю, что я думал. Вы запускаете add_option('bguru_options', $default_options); в каждом admin_init. Опция bguru_options была добавлена ​​в базу данных при первом запуске, а последующие вызовы add_option('bguru_options', $default_options); ничего не делают.

  • Используйте update_option(), чтобы изменить значение существующего параметра. Если опция не существует, она будет создана.
  • Используйте add_option(), если вам это действительно нужно. Например, если вам нужно установить autoload=no. Этот параметр не принят update_option(). Делайте это предпочтительно во время активации плагина/темы
  • Если вам нужно использовать add_option() и вы не уверены, существует ли эта опция, используйте delete_option() перед вызовом add_option().

РЕДАКТИРОВАТЬ 2

Я проверил ваш код в точности так, как он есть, и я его протестировал. URL-адрес логотипа по умолчанию правильно добавляется в базу данных в параметре bguru_options и возвращается функцией get_option('bguru_options');:

$options=get_option('bguru_options');
var_dump($options['bguru_logo']);

Там нет никаких проблем вообще. Единственным недостатком является то, что если вы оставите поле URL пустым, URL-адрес логотипа по умолчанию не будет установлен, потому что, я повторяю, add_option() ничего не делает при последующих вызовах, поскольку опция bguru_options уже существует.

Я проверил код, и он работает. Если это не работает для вас, мне нужно больше информации. Может быть, какой-нибудь журнал отладки?

В любом случае, я хочу показать вам, как get_option() поддерживает значения по умолчанию без необходимости сохранять значения по умолчанию в базе данных :

$default_options=array(
     'bguru_logo'=>'http://templategraphy.com/demo/businessguru/images/logo.png',
     'bguru_vimeo'=>'',
     'bguru_skype'=>'',
     'bguru_dribbble'=>'',
     'bguru_slide_one_image'=>'',
     'bguru_slide_one_heading'=>'',
     'bguru_slide_one_text'=>''
 );
 $bguru_options = get_option('bguru_options', $bguru_options_defaults);
 //Set defaults for unsaved subset in the array
 $bguru_options = wp_parse_args( $bguru_options, $bguru_options_defaults );
4
cybmeta