2012-04-26 57 views
16

Trong một cài đặt WordPress nhiều trang tôi tùy biến, tôi cần phải thêm một lĩnh vực văn bản đơn giản với mẫu đăng ký để tạo trang web blog mới, mà nằm ởWordPress + Multisite: Cách thêm tùy chọn blog tùy chỉnh để Thêm biểu mẫu Trang web Mới trong Quản trị Mạng?

Network Admin > Sites > Add New

Đương nhiên tôi cần lĩnh vực này để có được được lưu cùng với dữ liệu meta khác từ biểu mẫu đó, trong bảng {new_blog_prefix}_options.

Tôi đặc biệt quan tâm đến cách đơn giản nhất, đơn giản nhất và/hoặc "đúng cách" (tức là Cách WordPress) để thực hiện việc này, nhưng tôi sẽ giải quyết cho The Way That Works ™!

Cho đến nay tôi đã gặp phải rất nhiều kết thúc chết trong nghiên cứu của tôi:

  • API cài đặt - [WP Codex]

    Theo như tôi có thể nói, các API cài đặt (một)có thể không hoạt động đối với phần Quản trị mạng (mặc dù điều này có thể đã thay đổi trong phiên bản WP gần đây); hơn nữa, (b) có vẻ như điều này chỉ cho phép bạn thêm/sửa đổi màn hình trong phần Settings của Trang tổng quan.

  • wpmu_options móc - [Hooks DB]

    Có vẻ là một cái móc dành riêng cho thêm tùy chọn màn hình Network Settings.

  • add_site_option/add_blog_option - [WP Codex]

    gần nhất tôi có thể tìm thấy; dường như cho phép thêm các tùy chọn dành riêng cho trang web vào bảng {blogsite_prefix}_options, nhưng vẫn không giúp thêm tùy chọn vào biểu mẫu Quản trị viên.

Vì vậy ... không có súc sắc. Bất kỳ trợ giúp được đánh giá cao!

Trả lời

27

Nếu bạn nhìn vào trang source code của trang 'Thêm trang mới', bạn có thể thấy rằng WordPress không cung cấp móc cho mục đích này. Tất nhiên, nó sẽ có thể thêm một móc cho mình, nhưng nó thường là thực hành xấu để chỉnh sửa lõi WordPress.

Tuy nhiên, sau khi gửi và tất cả thông tin có mặt, trang gọi hàm wpmu_create_blog(). Trong chức năng này có một cái móc gọi là, cụ thể là hành động wpmu_new_blog:

do_action('wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta); 

Tại thời điểm này blog đã được tạo. Tuy nhiên, chúng tôi vẫn có thể phát hiện nếu một trường được gửi bằng cách gắn vào hành động này và lưu nó vào cơ sở dữ liệu. Chúng tôi thêm phần sau vào tệp plugin (hoặc mẫu) của chúng tôi:

function add_new_blog_field($blog_id, $user_id, $domain, $path, $site_id, $meta) { 

    // Make sure the user can perform this action and the request came from the correct page. 

    switch_to_blog($blog_id); 

    // Use a default value here if the field was not submitted. 
    $new_field_value = 'default'; 

    if (!empty($_POST['blog']['new_field'])) 
     $new_field_value = $_POST['blog']['new_field']; 

    // save option into the database 
    update_option('new_field', $new_field_value); 

    restore_current_blog(); 
} 

add_action('wpmu_new_blog', 'add_new_blog_field'); 

Để hiển thị trường trên trang, bạn có thể sử dụng cách tiếp cận JavaScript.Bạn thêm tệp javascript, chỉ vào trang 'Thêm trang mới' và tải trực tiếp trang bạn chèn trường vào đúng vị trí trên trang. Bạn nên thêm trường nhập với tên 'blog [new_field]'. Chúng tôi tạo ra các tập tin JavaScript sau đó, một lần nạp, bổ sung thêm một lĩnh vực mới cho 'Add New Site' page:

(function($) { 
    $(document).ready(function() { 
     $('<tr class="form-field form-required"></tr>').append(
      $('<th scope="row">New field</th>') 
     ).append(
      $('<td></td>').append(
       $('<input class="regular-text" type="text" title="New Field" name="blog[new_field]">') 
      ).append(
       $('<p>Explanation about your new field</p>') 
      ) 
     ).insertAfter('#wpbody-content table tr:eq(2)'); 
    }); 
})(jQuery); 

Bây giờ điều duy nhất còn lại để làm là bao gồm tập tin này vào trang 'New Site Add' , bằng cách thêm này đến file plugin của bạn:

// Only add the script for the page site-new.php (the page hook). 
add_action("admin_print_scripts-site-new.php", 'my_admin_scripts'); 

function my_admin_scripts() { 
    wp_register_script('yourScript', plugins_url('js/yourScript.js', __FILE__)); 
    wp_enqueue_script('yourScript'); 
} 

tiếp tục gợi ý có thể, tùy thuộc vào nhu cầu của bạn: Thêm một trường đầu vào trong trang cài đặt chung của bạn sử dụng add_settings_field, chẳng hạn người dùng có thể chỉnh sửa nó sau này (và có thể chỉ nếu đó là cài đặt mặc định cho trường này). Phương pháp 'bạn không thể thay đổi trường này sau'.

Tôi hy vọng đây là trợ giúp bạn cần.

+1

Cảm ơn, đây là câu trả lời thực sự tuyệt vời! Worthy of a +100 :) –

+0

Rất đẹp, nhưng một thay đổi nhỏ: 'if (! Empty ($ _ POST ['blog'] ['new_field'])) $ new_field_value = $ _POST ['blog'] ['new_field ']; 'cho' if (! isset ($ _ POST [' blog '] [' new_field '])) return FALSE; '... Xem xét giá trị rỗng của new_field, có thể được chấp nhận là giá trị chính xác – Mariyo

+1

Kể từ WP 4.5, một hook hành động hiện diện bên trong thẻ form của site-new.php được gọi là "network_site_new_form". – Berend

Các vấn đề liên quan