Загрузить изображения – Параметры темы

Я использую этот отличный [tuts + tutorial] [1] для создания страницы параметров темы. Это отлично работает для меня, потому что мне нужно изменить фоновые изображения divs через css. Он отлично работает с одним изображением, но я не знаю, как заставить его работать с двумя изображениями?

Было бы огромной помощью, если бы вы могли сказать мне, что я здесь делаю неправильно? Благодаря!

<?php function wptuts_get_default_options() { $options = array(); $options[] = array('logo' => ''); $options[] = array('fav' => ''); return $options; } function wptuts_options_init() { $wptuts_options = get_option( 'theme_wptuts_options' ); // Are our options saved in the DB? if ( false === $wptuts_options ) { // If not, we'll save our default options $wptuts_options = wptuts_get_default_options(); add_option( 'theme_wptuts_options', $wptuts_options ); } // In other case we don't need to update the DB } // Initialize Theme options add_action( 'after_setup_theme', 'wptuts_options_init' ); function wptuts_options_setup() { global $pagenow; if ('media-upload.php' == $pagenow || 'async-upload.php' == $pagenow) { // Now we'll replace the 'Insert into Post Button inside Thickbox' add_filter( 'gettext', 'replace_thickbox_text' , 1, 2 ); } } add_action( 'admin_init', 'wptuts_options_setup' ); function replace_thickbox_text($translated_text, $text ) { if ( 'Insert into Post' == $text ) { $referer = strpos( wp_get_referer(), 'wptuts-settings' ); if ( $referer != '' ) { return __('I want this to be my Image!', 'wptuts' ); } } return $translated_text; } // Add "WPTuts Options" link to the "Appearance" menu function wptuts_menu_options() { //add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $function); add_theme_page('WPTuts Options', 'WPTuts Options', 'edit_theme_options', 'wptuts-settings', 'wptuts_admin_options_page'); } // Load the Admin Options page add_action('admin_menu', 'wptuts_menu_options'); function wptuts_admin_options_page() { ?> <!-- 'wrap','submit','icon32','button-primary' and 'button-secondary' are classes for a good WP Admin Panel viewing and are predefined by WP CSS --> <div class="wrap"> <div id="icon-themes" class="icon32"><br /></div> <h2><?php _e( 'WPTuts Options', 'wptuts' ); ?></h2> <!-- If we have any error by submiting the form, they will appear here --> <?php settings_errors( 'wptuts-settings-errors' ); ?> <form id="form-wptuts-options" action="options.php" method="post" enctype="multipart/form-data"> <?php settings_fields('theme_wptuts_options'); do_settings_sections('wptuts'); ?> <p class="submit"> <input name="theme_wptuts_options[submit]" id="submit_options_form" type="submit" class="button-primary" value="<?php esc_attr_e('Save Settings', 'wptuts'); ?>" /> <input name="theme_wptuts_options[reset]" type="submit" class="button-secondary" value="<?php esc_attr_e('Reset Defaults', 'wptuts'); ?>" /> </p> </form> </div> <?php } function wptuts_options_validate( $input ) { $default_options = wptuts_get_default_options(); $valid_input = $default_options; $wptuts_options = get_option('theme_wptuts_options'); $submit = ! empty($input['submit']) ? true : false; $reset = ! empty($input['reset']) ? true : false; $delete_logo = ! empty($input['delete_logo']) ? true : false; $delete_fav = ! empty($input['delete_fav']) ? true : false; foreach ( $wptuts_options as $wptuts_options ) { if ( $submit ) { if ( $wptuts_options['logo'] != $input['logo'] && $wptuts_options['logo'] != '' ) delete_image( $wptuts_options['logo'] ); $valid_input['logo'] = $input['logo']; } elseif ( $reset ) { delete_image( $wptuts_options['logo'] ); $valid_input['logo'] = $default_options['logo']; } elseif ( $delete_logo ) { delete_image( $wptuts_options['logo'] ); $valid_input['logo'] = ''; } if ( $submit ) { if ( $wptuts_options['fav'] != $input['fav'] && $wptuts_options['fav'] != '' ) delete_image( $wptuts_options['fav'] ); $valid_input['fav'] = $input['fav']; } elseif ( $reset ) { delete_image( $wptuts_options['fav'] ); $valid_input['fav'] = $default_options['fav']; } elseif ( $delete_fav ) { delete_image( $wptuts_options['fav'] ); $valid_input['fav'] = ''; } return $valid_input; } function delete_image( $image_url ) { global $wpdb; // We need to get the image's meta ID.. $query = "SELECT ID FROM wp_posts where guid = '" . esc_url($image_url) . "' AND post_type = 'attachment'"; $results = $wpdb -> get_results($query); // And delete them (if more than one attachment is in the Library foreach ( $results as $row ) { wp_delete_attachment( $row -> ID ); } } /********************* JAVASCRIPT ******************************/ function wptuts_options_enqueue_scripts() { wp_register_script( 'wptuts-upload', get_template_directory_uri() .'/wptuts-options/js/wptuts-upload.js', array('jquery','media-upload','thickbox') ); if ( 'appearance_page_wptuts-settings' == get_current_screen() -> id ) { wp_enqueue_script('jquery'); wp_enqueue_script('thickbox'); wp_enqueue_style('thickbox'); wp_enqueue_script('media-upload'); wp_enqueue_script('wptuts-upload'); } } add_action('admin_enqueue_scripts', 'wptuts_options_enqueue_scripts'); function wptuts_options_settings_init() { register_setting( 'theme_wptuts_options', 'theme_wptuts_options', 'wptuts_options_validate' ); // Add a form section for the Logo add_settings_section('wptuts_settings_header', __( 'Logo Options', 'wptuts' ), 'wptuts_settings_header_text', 'wptuts'); // Add Logo uploader add_settings_field('wptuts_setting_logo', __( 'Logo', 'wptuts' ), 'wptuts_setting_logo', 'wptuts', 'wptuts_settings_header'); // Add Current Image Preview add_settings_field('wptuts_setting_logo_preview', __( 'Logo Preview', 'wptuts' ), 'wptuts_setting_logo_preview', 'wptuts', 'wptuts_settings_header'); // Add a form section for the fav add_settings_section('wptuts_settings_header', __( 'fav Options', 'wptuts' ), 'wptuts_settings_header_text', 'wptuts'); // Add fav uploader add_settings_field('wptuts_setting_fav', __( 'fav', 'wptuts' ), 'wptuts_setting_fav', 'wptuts', 'wptuts_settings_header'); // Add Current Image Preview add_settings_field('wptuts_setting_fav_preview', __( 'fav Preview', 'wptuts' ), 'wptuts_setting_fav_preview', 'wptuts', 'wptuts_settings_header'); } add_action( 'admin_init', 'wptuts_options_settings_init' ); function wptuts_setting_logo_preview() { $wptuts_options = get_option( 'theme_wptuts_options' ); ?> <div id="upload_logo_preview" style="min-height: 100px;"> <img style="max-width:100%;" src="<?php echo esc_url( $wptuts_options['logo'] ); ?>" /> </div> <?php } function wptuts_setting_fav_preview() { $wptuts_options = get_option( 'theme_wptuts_options' ); ?> <div id="upload_fav_preview" style="min-height: 100px;"> <img style="max-width:100%;" src="<?php echo esc_url( $wptuts_options['logo'] ); ?>" /> </div> <?php } function wptuts_settings_header_text() { ?> <p><?php _e( 'Manage Options for WpTuts Theme.', 'wptuts' ); ?></p> <?php } function wptuts_setting_logo() { $wptuts_options = get_option( 'theme_wptuts_options' ); ?> <input type="hidden" id="logo_url" name="theme_wptuts_options[logo]" value="<?php echo esc_url( $wptuts_options['logo'] ); ?>" /> <input id="upload_logo_button" type="button" class="button" value="<?php _e( 'Upload Logo', 'wptuts' ); ?>" /> <?php if ( '' != $wptuts_options['logo'] ): ?> <input id="delete_logo_button" name="theme_wptuts_options[delete_logo]" type="submit" class="button" value="<?php _e( 'Delete Logo', 'wptuts' ); ?>" /> <?php endif; ?> <span class="description"><?php _e('Upload an image for the banner.', 'wptuts' ); ?></span> <?php } function wptuts_setting_fav() { $wptuts_options = get_option( 'theme_wptuts_options' ); ?> <input type="hidden" id="fav_url" name="theme_wptuts_options[fav]" value="<?php echo esc_url( $wptuts_options['fav'] ); ?>" /> <input id="upload_fav_button" type="button" class="button" value="<?php _e( 'Upload fav', 'wptuts' ); ?>" /> <?php if ( '' != $wptuts_options['fav'] ): ?> <input id="delete_fav_button" name="theme_wptuts_options[delete_fav]" type="submit" class="button" value="<?php _e( 'Delete fav', 'wptuts' ); ?>" /> <?php endif; ?> <span class="description"><?php _e('Upload an image for the banner.', 'wptuts' ); ?></span> <?php } ?> 

Solutions Collecting From Web of "Загрузить изображения – Параметры темы"

Я не могу прокомментировать ваш код, но вы можете найти эту ссылку полезной:

Вариант Framework Тема: http://wptheming.com/options-framework-theme/

Это то, что вам нужно тщательно отредактировать, но у него есть почти любой тип контроля, о котором вы можете думать. У него также был единственный рабочий редактор MCE, который я мог найти. Я хотел, чтобы это разрешало сохранять текст в теме, например, редактирование адреса в нижнем колонтитуле или авторское право.

Вам нужно добавить новые параметры для обратного вызова валидации, wptuts_options_validate() .

Не видя всего вашего кода, невозможно точно сказать, какой именно код нужно добавить. Но в целом, как работает обратный вызов валидации: с помощью API настроек все пользовательские ввод осуществляется в белый список : это: вход сохраняется только в базу данных, если он явно объявлен как действительный параметр, а затем дезинфицирован перед сохранением.

Предположим, у вас есть 3 варианта: «A», «B» и «C». Вот что делает обратный вызов проверки правильности:

 function validation_callback( $input ) { } 

Во-первых, параметр $input – это данные $_POST переданные пользователем через форму настроек. Это ненадежные данные. Идея состоит в том, чтобы манипулировать пользовательскими данными, а затем сохранять их в базе данных.

Аспект обратного вызова в белом списке означает, что функция будет явно манипулировать только известными параметрами, а затем передать управляемый, известный список в базу данных. Что-то вроде этого:

 function validation_callback( $input ) { // Get current option values // and use them as the current "valid" values $valid_input = get_option( 'some_options_group' ); // A is a checkbox // If it is set, then return true; else return false $valid_input['A'] = ( isset( $input['A'] ? 'true' : 'false' ); // B is a select // If the value passed in $input is contained // in the array of known-good values, then return // $input value; else return the current value $valid_options_b = array( 'X', 'Y', 'Z' ); $valid_input['B'] = ( in_array( $input['B'], $valid_options_b ) ? $input['B'] : $valid_input['B'] ); // C is plain text, for which no HTML is expected // Simply return filtered $input value if set; // else return an empty string $valid_input['C'] = ( isset( $input['C'] ) ? wp_filter_nohtml_kses( $input['C'] ) : '' ); // All known values have been sanitized, // so return those values return $valid_input; } 

Итак, теперь вы хотите добавить еще один действительный вариант «D».

Если вы добавили эту опцию, и она появится на странице настроек, отлично. Это первый шаг. Теперь ваш параметр «D» будет включен в массив $input который будет передан в обратный вызов проверки.

Но поскольку ваш обратный вызов не имеет опции «D» в белом списке , он по существу фильтруется из $input и никогда не сохраняется в базе данных. Поэтому вам нужно добавить его. Возможно, так:

 // D is a file // So let WordPress handle the file upload $valid_input['D'] = ( isset( $input['D'] ) ? wp_handle_upload( $input['D'] ) : $valid_input['D'] ); 

Вы добавили бы это в свой обратный вызов проверки:

 function validation_callback( $input ) { // Get current option values // and use them as the current "valid" values $valid_input = get_option( 'some_options_group' ); // A is a checkbox // If it is set, then return true; else return false $valid_input['A'] = ( isset( $input['A'] ? 'true' : 'false' ); // B is a select // If the value passed in $input is contained // in the array of known-good values, then return // $input value; else return the current value $valid_options_b = array( 'X', 'Y', 'Z' ); $valid_input['B'] = ( in_array( $input['B'], $valid_options_b ) ? $input['B'] : $valid_input['B'] ); // C is plain text, for which no HTML is expected // Simply return filtered $input value if set; // else return an empty string $valid_input['C'] = ( isset( $input['C'] ) ? wp_filter_nohtml_kses( $input['C'] ) : '' ); // ADD INPUT D HERE // D is a file // So let WordPress handle the file upload $valid_input['D'] = ( isset( $input['D'] ) ? wp_handle_upload( $input['D'] ) : $valid_input['D'] ); // All known values have been sanitized, // so return those values return $valid_input; } 

Теперь опция «D» включена в белый список и должна быть правильно сохранена в базе данных.