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.
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.
update_option()
, um den Wert einer vorhandenen Option zu ändern. Wenn die Option nicht existiert, wird sie erstellt.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-Aktivierungadd_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 );