Я работал над этой страницей параметров буквально недели и недели и столкнулся с одной проблемой за другой.Сегодня я выпустил тему «Прохладный апельсин», думая, что все в порядке.Затем я вошел в свою панель администратора, переключившись на другую тему для работы, и «Cool Orange Theme Options» показывался как пункт меню, но Cool Orange не был активирован!Страница параметров темы должна отображаться только для текущей активированной темы.
Что странно, это то, что страница параметров темы отображалась так, как и предполагалось в учетной записи администратора Windows, но не в ограниченной учетной записиЯ использую.Я не думаю, что это должно иметь значение, хотя.Может кто-нибудь взглянуть на мой код ниже и сказать мне, что может быть не так.
<?php
// This options page mainly follows the WordPress Settings API Tutorial at
// http://ottodestruct.com/blog/2009/wordpress-settings-api-tutorial/
add_action('admin_init', 'co_admin_init');
add_action('admin_menu', 'co_admin_add_page');
function co_admin_add_page() {
add_theme_page(
'Cool Orange Theme Options',
'Cool Orange Theme Options',
'manage_options',
'coolorange',
'co_theme_options_page'
);
}
function co_admin_init() {
register_setting(
'coolorange_theme_options',
'coolorange_theme_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 Library</strong>',
'file_upload_button',
'coolorange',
'coolorange_logo_main'
); // Upload Logo button
add_settings_field(
'image_url',
'<strong>Logo location</strong>',
'file_location',
'coolorange',
'coolorange_logo_main'
); // logo url field
...more add_settings_field sections
}
function co_theme_options_page() {
?>
<div class="wrap" style="margin-bottom: 20px;">
<div id="icon-themes" class="icon32"><br /></div><h2>Cool Orange Theme Options</h2>
<?php if($_REQUEST['settings-updated'] == 'true') {
echo '<div id="message" class="updated fade"><p>Cool Orange options saved.</p></div>';
} ?>
<form action="options.php" method="post" name="options_form">
<?php settings_fields('coolorange_theme_options'); ?>
<?php do_settings_sections('coolorange'); ?>
<div style="text-align: center; padding: 20px;"><input name="Submit" class="button-primary" type="submit" value="<?php esc_attr_e('Save Changes'); ?>" /></div>
</form>
</div>
<?php
}
function logo_section_text() { ?>
<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>
<p><strong>How to upload a logo to replace the heading:</strong></p>
<div style="background-color: #FFFFFF; border: 1px solid #BBBBBB; padding: 30px; margin-bottom: 10px;">
...logo upload instructions
</div>
<?php }
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" />';
}
//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/
// Associated with file_upload_button function
function my_admin_scripts() {
wp_enqueue_script('media-upload');
wp_enqueue_script('thickbox');
wp_register_script('my-upload', trailingslashit( get_stylesheet_directory_uri()).'scripts/invoke_uploader.js', array('jquery','media-upload','thickbox'));
wp_enqueue_script('my-upload');
}
function my_admin_styles() {
wp_enqueue_style('thickbox');
}
if (isset($_GET['page']) && $_GET['page'] == 'coolorange') {
add_action('admin_print_scripts', 'my_admin_scripts');
add_action('admin_print_styles', 'my_admin_styles');
} ?>
<?php
... more settings functions
function logo_css() {
global $coolorange_theme_options;
$coolorange_settings = get_option('coolorange_theme_options');
$backgroundurl = $coolorange_settings['image_url'];
$imagewidth = $coolorange_settings['image_width'];
$imageheight = $coolorange_settings['image_height'];
$paddingtop = $coolorange_settings['padding_top'];
$paddingright = $coolorange_settings['padding_right'];
$paddingbottom = $coolorange_settings['padding_bottom'];
$paddingleft = $coolorange_settings['padding_left'];
$removetitle = $coolorange_settings['remove_blogtitle']; ?>
<style type="text/css">
<!--
#logo {
<?php if ($backgroundurl) echo "background: url(" . $coolorange_settings['image_url'] . ") top center no-repeat";
else echo "background: transparent"; ?>;
width: <?php if ($imagewidth) echo $imagewidth; else echo "auto"; ?>;
height: <?php if ($imageheight) echo $imageheight; else echo "auto"; ?>;
padding-top: <?php if ($paddingtop) echo $paddingtop; else echo "1em"; ?>;
padding-right: <?php if ($paddingright) echo $paddingright; else echo "2em"; ?>;
padding-bottom: <?php if ($paddingbottom) echo $paddingbottom; else echo "1em"; ?>;
padding-left: <?php if ($paddingleft) echo $paddingleft; else echo "2em"; ?>;
margin: 0 auto;
}
#blog-title a {
display: block;
width: <?php if ($imagewidth) echo $imagewidth; else echo "auto"; ?>;
height: <?php if ($imageheight) echo $imageheight; else echo "auto"; ?>;
text-indent: <?php if ( $removetitle ) echo "-2000px"; else echo "0"; ?>;
}
#blog-description {
text-indent: <?php if ( $removetitle ) echo "-2000px"; else echo "0"; ?>;
}
-->
</style>
<?php } //closes logo_css function
add_action('wp_head', 'logo_css');
//Validation
function coolorange_options_validate($input) { // opens coolorange_options_validate function
$options = get_option('coolorange_theme_options');
//check filetypes for image url
$options['image_url'] = trim($input['image_url']);
//var_dump($options); // for debugging
if ( !preg_match ( '/\.(gif|jpg|jpeg|png)$/', $options['image_url'] ) ) { //opens if statement
$options['image_url'] = '';
//echo '<div id="message" style="color: red;"><p>File type must have the file extension .jpg, .jpeg, .gif or .png</p></div>';
} // closes if statement
...more validation code
//check input on padding left to make sure it includes only numbers, letters and the percentage sign
$options['padding_left'] = trim($input['padding_left']);
if ( !preg_match ( '/[0-9](px|em|%)/', $options['padding_left'] ) ) {
$options['padding_left'] = '';
//echo '<div id="message" style="color: red;"><p>Padding top must be specified in px, em or %</p></div>';
}
//check if checkbox has been checked
$options['remove_blogtitle'] = $input['remove_blogtitle'];
if ( !isset( $input['remove_blogtitle'] ) ) {
$input['remove_blogtitle'] = null;
}
return $options;
} // closes coolorange_options_validate function
//if (isset($_GET['page']) && isset($_GET['page']) == 'coolorange')
// add_action('admin_notices', 'coolorange_options_validate'); //shows validation errors at the top of the page
?>
Я для краткости пропустил некоторый повторяющийся код.