it-swarm.com.de

Array in add_option () übergeben

Ich muss eine Optionsseite in meinem benutzerdefinierten Thema WordPress erstellen. Hier ist ein Codebeispiel

<?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  } ?>

Alle Formulardetails werden vom Dashboard übergeben. Wenn der Administrator vergessen hat, das Logo-Feld auszufüllen, werden diese $ default_options standardmäßig ausgefüllt, aber wenn ich versuche, mit get_option auf das Array zuzugreifen, erhalte ich keine Ergebnisse erwarten von.

1
Payal

Ich denke, dass Sie bguru_options Option vor hinzugefügt haben. Wenn bguru_options bereits vorhanden ist, führt add_option() nichts aus. Um den Wert bestehender Optionen zu ändern, sollten Sie stattdessen update_option() verwenden.

EDIT

Ich bestätige was ich dachte. Sie führen add_option('bguru_options', $default_options); in jedem admin_init aus. Die Option bguru_options wurde im ersten Durchlauf zur Datenbank hinzugefügt, und nachfolgende Aufrufe von add_option('bguru_options', $default_options); führen zu keinem Ergebnis.

  • Verwenden Sie update_option(), um den Wert einer vorhandenen Option zu ändern. Wenn die Option nicht existiert, wird sie erstellt.
  • Verwenden Sie add_option(), wenn Sie es wirklich brauchen. Zum Beispiel, wenn Sie autoload=no einstellen müssen. Dieser Parameter wird von update_option() nicht akzeptiert. Tun Sie dies vorzugsweise während der Plugin/Theme-Aktivierung
  • Wenn Sie add_option() verwenden müssen und nicht sicher sind, ob die Option bereits vorhanden ist, verwenden Sie delete_option(), bevor Sie add_option() aufrufen.

EDIT 2

Ich habe Ihren Code genau so getestet, wie er ist, und ich habe ihn getestet. Die Standard-Logo-URL wird der Datenbank in der Option bguru_options korrekt hinzugefügt und von get_option('bguru_options'); zurückgegeben:

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

Es gibt überhaupt kein Problem. Der einzige Nachteil ist, dass, wenn Sie das URL-Feld leer lassen, die Standard-Logo-URL nicht festgelegt wird, da add_option() bei nachfolgenden Aufrufen nichts unternimmt, da die Option bguru_options bereits vorhanden ist.

Ich habe den Code getestet und es funktioniert. Wenn es bei Ihnen nicht funktioniert, benötige ich weitere Informationen. Vielleicht ein Debug-Protokoll?

Wie auch immer, ich möchte Ihnen zeigen, wie get_option() Standardwerte unterstützt, ohne dass Standardwerte in der Datenbank gespeichert werden müssen :

$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