Несколько Custom_Background, возможно ли это?

Возможно ли создать несколько страниц администрирования «пользовательского фона»? Сайт, который я делаю сейчас, нуждается в 2 разных фонах в двух разных областях, я бы очень хотел дать моему клиенту тот же опыт для обоих фонов с точки зрения цвета / изображения / выбора-повтора и т. Д. Любые идеи?

Привет @Amit:

Ответ: «Да, это возможно». Следующий вопрос: «Вы действительно хотите?»

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

Этот код обрабатывает все стороны консоли администратора, создавая новый пункт меню в разделе « Внешний вид », называемом «Специальный фон». То, что он не делает, это предоставить какой-либо способ фактического использования фона; это вторая фаза плагина и потребует подключения многих функций в /wp-includes/themes.php и, честно говоря, я не знаю, смогу ли я написать этот код.

Причина, по которой я остановился, не делал этого, я не знал требований, где должен отображаться специальный фон и где будет отображаться обычный. Предполагаю, возможно, для выбранных страниц и / или путей URL?

Тем не менее, здесь, если код для плагина (который вы также можете скачать из gist ):

 <?php /* Plugin Name: Special Background Plugin URI: http://wordpress.stackexchange.com/questions/972/ Description: Example to show how to add a special background using exiting background admin page in core. Version: 0.1 Author: Mike Schinkel Author URI: http://mikeschinkel.com/custom-wordpress-plugins/ */ add_filter('admin_menu','add_special_background_menu_item'); function add_special_background_menu_item() { add_theme_page(__('Special Background'), __('Special Background'),'edit_theme_options','special-background','special_background_admin_page'); } add_filter('admin_init','add_js_for_special_background'); function add_js_for_special_background() { global $custom_background; if (is_special_background_page()) { wp_enqueue_script('custom-background'); wp_enqueue_style('farbtastic'); } $hook = 'load-appearance_page_special-background'; add_action($hook, array(&$custom_background, 'admin_load')); add_action($hook, array(&$custom_background, 'take_action'), 49); add_action($hook, array(&$custom_background, 'handle_upload'), 49); } add_filter('theme_mod_background_image', 'theme_mod_special_background_image'); add_filter('theme_mod_background_image_thumb','theme_mod_special_background_image_thumb'); add_filter('theme_mod_background_repeat', 'theme_mod_special_background_repeat'); add_filter('theme_mod_background_position_x', 'theme_mod_special_background_position_x'); add_filter('theme_mod_background_attachment', 'theme_mod_special_background_attachment'); add_filter('theme_mod_background_color', 'theme_mod_special_background_color'); function theme_mod_special_background_image($defaults) { return theme_mod_special_background_image_attrs('image',$defaults); } function theme_mod_special_background_image_thumb($defaults) { return theme_mod_special_background_image_attrs('image_thumb',$defaults); } function theme_mod_special_background_repeat($defaults) { return theme_mod_special_background_image_attrs('repeat',$defaults); } function theme_mod_special_background_position_x($defaults) { return theme_mod_special_background_image_attrs('position_x',$defaults); } function theme_mod_special_background_attachment($defaults) { return theme_mod_special_background_image_attrs('attachment',$defaults); } function theme_mod_special_background_color($defaults) { return theme_mod_special_background_image_attrs('color',$defaults); } function theme_mod_special_background_image_attrs($attr,$defaults) { if (is_special_background_page()) { $mods = get_option( 'mods_' . get_current_theme() ); $defaults = (!empty($mods["special_background_{$attr}"]) ? $mods["special_background_{$attr}"] : ''); } return $defaults; } add_filter('pre_update_option_mods_' . get_current_theme(),'pre_update_option_special_background_image',10,2); function pre_update_option_special_background_image($newvalue, $oldvalue) { static $times_called = 0; if (!empty($_POST) && is_special_background_page()) { if ((isset($_POST['action']) && $_POST['action']=='save') || isset($_POST['reset-background']) || isset($_POST['remove-background'])) { switch ($times_called) { case 0: $newvalue = special_background_image_value_swap('image',$newvalue,$oldvalue); break; case 1: $newvalue = special_background_image_value_swap('image_thumb',$newvalue,$oldvalue); break; } } else { if ($times_called==0 && isset($_POST['background-repeat'])) { $newvalue = special_background_image_value_swap('repeat',$newvalue,$oldvalue); } if ($times_called==1 && isset($_POST['background-position-x'])) { $newvalue = special_background_image_value_swap('position_x',$newvalue,$oldvalue); } if ($times_called==2 && isset($_POST['background-attachment'])) { $newvalue = special_background_image_value_swap('attachment',$newvalue,$oldvalue); } if ($times_called==3 && isset($_POST['background-color'])) { $newvalue = special_background_image_value_swap('color',$newvalue,$oldvalue); } } $times_called++; } return $newvalue; } function special_background_image_value_swap($swap_what,$newvalue,$oldvalue) { $newvalue["special_background_{$swap_what}"] = $newvalue["background_{$swap_what}"]; $newvalue["background_{$swap_what}"] = $oldvalue["background_{$swap_what}"]; return $newvalue; } function special_background_admin_page() { global $custom_background; if (is_special_background_page()) { global $parent_file,$submenu_file,$title; $parent_file = 'themes.php'; $submenu_file = 'themes.php?page=special-background'; $title = 'Special Background'; require_once(ABSPATH . 'wp-admin/admin-header.php'); ob_start(); $custom_background->admin_page(); $html = ob_get_clean(); $html = preg_replace('#<h2>([^<]+)</h2>#','<h2>Special Background</h2>',$html); echo $html; include(ABSPATH . 'wp-admin/admin-footer.php'); exit; } } function is_special_background_page() { global $pagenow; return ($pagenow=='themes.php' && isset($_GET['page']) && $_GET['page']== 'special-background'); } 

Честно говоря, слишком много кода, чтобы объяснить проактивно, но я буду рад ответить на конкретные вопросы.

Технически это возможно (чтобы расширить источник wordpress), но не по умолчанию. Поэтому я бы ответил, что нет. Встроенная функция фоновой темы предназначена для отдельной графики только по умолчанию.

Но если вы расскажете немного больше о «двух разных областях», о которых вы пишете, может быть что-то приятное предложить рядом с этим.

Изменить: выделить для MikeSchinkel. Плагины расширяют источник wordpress.