Мои настройки не сохраняются на странице настроек WordPress - PullRequest
2 голосов
/ 04 июня 2011

Я пытаюсь создать страницу параметров темы на основе настроек API WordPress.Когда я захожу, чтобы проверить страницу options.php в своем браузере (например, http://mysite.com/wordpress/wp-admin/options.php),, я вижу запись для coolorange_options, но она пустая. Это произошло после того, как я добавил URL, ширину и высоту в текстовые поля.

До сих пор у меня было достаточно написанного кода, чтобы получить информацию и сохранить ее в базе данных, но не для извлечения ее для чего-либо. Я ссылался на учебник в комментарии 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 Ответ

2 голосов
/ 05 июня 2011

Я нашел ответ на этот вопрос сегодня утром. Согласно руководству, мне нужно было убедиться, что имена для каждой опции (поля ввода, опции окна выбора и т. Д.) Были указаны как name = "coolorange_options [some_text]". Я назвал часть 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, что, как я полагаю, означает, что массив был записан в базу данных опций.

...