2011-06-04 122 views
1

我想創建一個基於WordPress的設置API的主題選項頁面。當我在瀏覽器中查看options.php頁面時(例如,http://mysite.com/wordpress/wp-admin/options.php),我看到一個coolorange_options條目,但它是空的。我在向文本字段添加了url,width和height後發生了這種情況。我的設置不保存在wordpress主題選項頁

到目前爲止,我已經編寫了足夠的代碼來獲取信息並將其存儲到數據庫,但不能檢索任何內容。我在代碼頂部的php註釋中引用了一個教程。考慮到我對PHP或編程知之甚少,這裏一定是錯的,我只是不知道該怎麼做。整個代碼如下:

<?php 
// This options page mainly follows the WordPress Settings API Tutorial at 
// http://ottodestruct.com/blog/2009/wordpress-settings-api-tutorial/ 
add_action('admin_menu', 'theme_admin_add_page'); 
add_action('admin_init', 'theme_admin_init'); 

function theme_admin_init() { 
register_setting('coolorange_theme_options', 'coolorange_options', 'coolorange_options_validate'); 
// what each parameter represents: add_settings_field($id, $title, $callback, $page, $section, $args); 
add_settings_section('coolorange_logo_main', 'Logo Section Settings', 'logo_section_text', 'coolorange'); 
add_settings_field('upload_image_button', '<strong>Upload logo to the Media Folder</strong>', 'file_upload_button', 'coolorange', 'coolorange_logo_main'); // Upload Logo button 
add_settings_field('logo_textfields', '<strong>Logo location</strong>', 'file_location', 'coolorange', 'coolorange_logo_main'); // logo url, width and height text fields 
add_settings_field('restore_selectbox', '<strong>Restore original heading</strong>', 'restore_dropdown', 'coolorange', 'coolorange_logo_main'); 
} 

function logo_section_text() { 
echo '<p>In this section, you can replace the standard blog title heading with a custom logo. The logo cannot be wider than <strong>960 pixels</strong>.</p>'; 
} 

function file_upload_button() { 
$options = get_option('coolorange_theme_options'); 
echo '<input id="upload_image_button" class="button-secondary" type="button" name="coolorange_theme_options[upload_image_button]" value="Upload Logo" />'; 
} 

function file_location() { //opens file_location function 
$options = get_option('coolorange_theme_options'); ?> 
<h3>How to upload a logo to replace the heading</h3> 
    <div style="background-color: #FFFFFF; border: 1px solid #BBBBBB; padding: 30px;"> 
    <ul style="list-style: disc;"> 
     ...instructions to upload logo 
    </ul> 
</div> 
<p><strong>File URL:</strong> <input id="image_url" type="text" value="<?php $options['image_url']; ?>" size="60" name="coolorange_theme_options[image_url]" /><br /> 
<strong>Logo width:</strong> <input id="image_width" type="text" value="<?php $options['image_width']; ?>" size="6" name="coolorange_theme_options[image_width]" /> Enter logo width in pixels (for example <strong>800px</strong>)<br /> 
<strong>Logo height:</strong> <input id="image_height" type="text" value="<?php $options['image_height']; ?>" size="6" name="image_height" /> Enter logo height in pixels (for example <strong>90px</strong>)</p> 
<?php 
} //closes file_location function 

function restore_dropdown() { //opens restore_dropdown function 
$options = get_option('coolorange_theme_options'); 
// http://codex.wordpress.org/Function_Reference/selected ?> 
<select name="co_restore_selectbox[select_options]" id="co_restore_selectbox"> 
    <option value="default" <?php if ($co_restore_selectbox['select_options'] == 'default') 
     echo 'selected="selected"'; ?>>select an option</option> 
    <option value="restore" <?php if ($co_restore_selectbox['select_options'] == 'restore') 
     echo 'selected="selected"'; ?>>Restore CSS</option> 
</select> 
<?php 
} // closes restore_dropdown funcion 

function css_switcher() { 
$options = get_option('coolorange_theme_options'); 
//$backgroundurl = "url('" . $options['image_url']; . "') top center no-repeat"; 
?> 
<style type="text/css"> 
<!-- 
#logo { 
background: <?php echo $backgroundurl; ?>; 
width: <?php echo $image_width; ?>; 
height: <?php echo $image_height; ?>; 
padding: 1em 2em 0 2em; 
margin: 0 auto; 
} 

#blog-title a { 
display: block; 
width: <?php echo $image_width; ?>; 
height: <?php echo $image_height; ?>; 
text-indent: -2000px; 
} 

#blog-description { 
text-indent: -2000px; 
} 
--> 
</style> 
<?php } // closes css_switcher function 

add_action('wp_head', 'css_switcher'); 

function theme_admin_add_page() { 
add_theme_page('Cool Orange Theme Options','Cool Orange Theme Options','manage_options','coolorange','theme_options_page'); 
} 

//Scripts to load WP's Media Library panel 
//http://www.webmaster-source.com/2010/01/08/using-the-wordpress-uploader-in-your-plugin-or-theme/ 
function my_admin_scripts() { 
...scripts to load media library - unrelated 
} 

function my_admin_styles() { 
...styles for media library loader 
} 

if (isset($_GET['page']) && $_GET['page'] == 'coolorange') { 
...actions to add for media library loader script 
} 

function theme_options_page() { 
?> 
<div class="wrap"> 
<div id="icon-themes" class="icon32"><br /></div><h2>Cool Orange Theme Options</h2> 
<form action="options.php" method="post" name="options_form"><?php settings_fields('coolorange_theme_options'); ?> 
<?php do_settings_sections('coolorange'); ?> 

<input name="Submit" class="button-primary" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" /> 
</form> 
</div> 
<?php 
} 
?> 

回答

1

我今天早些時候發現了這個問題的答案。根據教程,我需要確保每個選項的名稱(輸入字段,選擇框選項等)被指定爲name =「coolorange_options [some_text]」。我在id後面命名了some_text部分,例如name =「coolorange_options [image_url]。

在本教程中,我在http://ottopress.com/2009/wordpress-settings-api-tutorial/上跟隨較新版本,每個名稱被php識別爲一個數組。名稱co_restore_selectbox [select_options]沒有顯示爲數組的一部分,直到我將它們更改爲coolorange_options [select_options]。當我在瀏覽器中再次檢查options.php時,coolorange_options下的條目顯示了SERIALIZED DATA字樣,我假設它是數組被寫入選項數據庫。