カスタムテーマのワードプレスでオプションページを作成する必要があります。これがコードのサンプルです
<?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 } ?>
管理者がlogoフィールドを埋めるのを忘れた場合、デフォルトではこの$ default_optionsが機能するので、フォームの詳細はすべてダッシュボードで渡されますが、get_optionを使用して配列にアクセスしようとしたとき期待しています。
以前にbguru_options
オプションを追加したと思います。 bguru_options
が既に存在する場合、add_option()
は何もしません。既存のオプションの値を変更するには、代わりにupdate_option()
を使うべきです。
編集
私は自分の考えを確認しました。あなたはすべてのadmin_init
でadd_option('bguru_options', $default_options);
を実行しています。最初の実行でbguru_options
オプションがデータベースに追加され、それ以降のadd_option('bguru_options', $default_options);
の呼び出しは何もしません。
update_option()
を使用してください。オプションが存在しない場合は作成されます。add_option()
を使ってください。例えばautoload=no
を設定する必要があるならば。このパラメータはupdate_option()
では受け付けられません。プラグイン/テーマのアクティブ化中にこれを行うadd_option()
を使う必要があり、そのオプションがすでに存在するかどうか不明な場合は、delete_option()
を呼び出す前にadd_option()
を使ってください。EDIT 2
私はあなたのコードを正確にテストし、そしてそれをテストしました。デフォルトのロゴURLはbguru_options
オプションでデータベースに正しく追加され、get_option('bguru_options');
によって返されます。
$options=get_option('bguru_options');
var_dump($options['bguru_logo']);
全く問題ありません。唯一の欠点は、bguru_options
オプションが既に存在するため、add_option()
が後続の呼び出しで何もしないため、URLフィールドを空白のままにした場合、デフォルトのロゴURLが設定されないことです。
私はコードをテストしました、そしてそれはうまくいきます。それがあなたのために働かないなら、私はより多くの情報が必要になります。たぶんいくつかのデバッグログ?
とにかく、/ _を必要とせずに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 );