несколько custom\_background, это возможно?

<p>можно ли создать несколько страниц администрирования "пользовательский фон"? сайт, который я сейчас делаю, нуждается в двух разных фонах в двух разных областях, и мне бы очень хотелось, чтобы мой клиент имел одинаковый опыт для обоих фонов с точки зрения цвета/изображения/выбора-повтора и т.д. есть идеи?</p>

<p>привет <strong> @ амит: </strong></p><p>ответ <em> "да, это возможно." </em> следующий вопрос <em> "вы действительно хотите?" </em></p><p>я подумал, что было бы интересно посмотреть, смогу ли я создать плагин, чтобы делать то, что вы просите, поэтому я решил посмотреть, возможно ли это. конечно, мне удалось заставить его работать, но я боюсь, что код плагина, который я написал, должен быть настолько тесно связан с существующим кодом в wordpress, что он может легко сломаться при обновлении ядра.</p><p>этот код обрабатывает все стороны консоли администратора, создавая новый пункт меню в разделе <em> внешний вид </em>, который называется <em> "специальный фон" </em>. do - это любой способ использовать фон; это вторая фаза плагина и потребует подключения многих функций в <code>/wp-includes/themes.php</code>, и, честно говоря, я не знаю, получу ли я возможность написать этот код.</p><p>причина, по которой я остановился без этого, в том, что я не знал требований, где должен показываться специальный фон и где показывался обычный фон. я предполагаю, может быть, для выбранных страниц и/или url-путей?</p><p>тем не менее, вот если код для плагина (который вы также можете скачать с <a href="http://gist.github.com/554874">gist</a> ):</p><pre><code><?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'); } </code></pre><p>честно говоря, это слишком много кода, чтобы объяснять проактивно, но я буду рад ответить на конкретные вопросы.</p>

<p>технически <strong> это возможно </strong> (чтобы расширить источник wordpress), но не по умолчанию. так что я бы ответил нет. функция встроенной фоновой темы предназначена только для одной графики по умолчанию.</p><p>но если вы расскажете немного больше о "двух разных областях", о которых пишете, может быть что-то хорошее, что можно предложить рядом с этим.</p><p>правка: выделить для mikeschinkel. плагины расширяют источник wordpress.</p>