Пункт меню параметров темы добавляется к каждой теме - PullRequest
0 голосов
/ 12 июня 2011

Я работал над этой страницей параметров буквально недели и недели и столкнулся с одной проблемой за другой.Сегодня я выпустил тему «Прохладный апельсин», думая, что все в порядке.Затем я вошел в свою панель администратора, переключившись на другую тему для работы, и «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
?>

Я для краткости пропустил некоторый повторяющийся код.

1 Ответ

0 голосов
/ 13 июня 2011

Спасибо Stack 101 за комментирование.Оказывается, тема, которую я использовал все время, была Cool Orange, потому что она сохранялась как cookie в моем браузере.В то время, когда я писал это, я не думал о том, что у меня был активирован плагин Theme Switcher, и я использовал его для переключения на тему Cool Orange.

Theme Switcher сохраняет, какая тема используется впеченье.Этот файл cookie перезаписывает активацию темы панели администратора WP.Когда я удалил отдельный файл cookie для Cool Orange из своего браузера, панель «Внешний вид» каждой темы вернулась в нормальное состояние.

...