it-swarm-vi.tech

Nhiều Custom_Background, có thể không?

Có thể tạo nhiều trang quản trị "nền tùy chỉnh" không? Một trang web tôi đang làm hiện cần 2 nền khác nhau ở 2 khu vực khác nhau, tôi thực sự thích mang lại cho khách hàng của tôi trải nghiệm giống nhau cho cả hai nền về màu sắc/hình ảnh/chọn lặp lại, v.v.

3
Amit

Xin chào @ Amit:

Câu trả lời là "Có, có thể." Câu hỏi tiếp theo là "Bạn có thực sự muốn không?"

Tôi nghĩ sẽ rất vui nếu tôi có thể xây dựng một plugin để làm những gì bạn đang yêu cầu vì vậy tôi quyết định xem liệu nó có thể không. Tất nhiên tôi đã có thể làm cho nó hoạt động nhưng tôi sợ rằng mã plugin tôi đã viết cần phải được kết hợp chặt chẽ với mã hiện có trong WordPress để có thể dễ dàng phá vỡ bản cập nhật cốt lõi.

Mã này xử lý tất cả các mặt của bảng điều khiển quản trị viên bằng cách tạo một mục menu mới trong phần Giao diện có tên "Nền đặc biệt." làm là cung cấp bất kỳ cách nào để thực sự sử dụng nền; đó là giai đoạn hai của plugin và sẽ yêu cầu nối nhiều hàm trong /wp-includes/themes.php và thật lòng tôi không biết liệu tôi có cơ hội để viết mã đó không.

Lý do tôi dừng lại mà không làm điều đó là vì tôi không biết các yêu cầu về nơi nền đặc biệt sẽ hiển thị và nơi thường xuyên sẽ hiển thị. Tôi giả sử có thể cho các trang được chọn và/hoặc đường dẫn URL?

Tuy nhiên, ở đây nếu mã cho plugin (mà bạn cũng có thể tải xuống từ 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');
}

Thành thật mà nói, đó là quá nhiều mã để giải thích một cách chủ động nhưng tôi sẽ vui lòng trả lời các câu hỏi cụ thể.

2
MikeSchinkel

Về mặt kỹ thuật có thể (để mở rộng nguồn wordpress), nhưng không phải theo mặc định. Vì vậy, tôi sẽ đưa ra câu trả lời là không. Tính năng chủ đề nền tích hợp chỉ dành cho một đồ họa duy nhất.

Nhưng nếu bạn mô tả thêm một chút về "2 lĩnh vực khác nhau" mà bạn đang viết, có thể có một cái gì đó hay để đề xuất bên cạnh này.

Chỉnh sửa: Đánh dấu cho MikeSchinkel. Các plugin đang mở rộng nguồn wordpress.

0
hakre