Làm cách nào để thêm trường cho tùy chọn toàn trang mới trên màn hình Cài đặt mạng?


15

Tôi đang làm việc với một plugin và một phần của nó liên quan đến việc đặt giá trị tùy chọn áp dụng cho tất cả các trang web trong mạng WordPress. Tôi biết về các hàm add_site_optionget_site_option cho phép bạn lưu giá trị vào bảng wp_sitemeta, nhưng điều tôi không thể tìm ra là làm thế nào để đặt các trường vào vị trí thích hợp trong phụ trợ WordPress và cách chặn việc lưu lại sitewide các giá trị để chèn lệnh gọi add_site_option khi điều đó xảy ra.

Đối với sự cố đầu tiên (thêm các trường), thông thường tôi sẽ sử dụng API Cài đặt, cụ thể là register_settingadd_sinstall_field, để đưa danh sách trắng vào tùy chọn mới và sau đó chèn một trường cho nó vào trang tùy chọn thích hợp. Nhưng tôi không thể tìm thấy thông tin ở bất cứ đâu về việc bạn có thể sử dụng add_sinstall_field để thêm trường vào trang Cài đặt trong phần Quản trị mạng mới của phần phụ trợ hay không, nếu có một chức năng thay thế hoạt động cho các trang Quản trị mạng hoặc nếu bạn chỉ cần tiêm HTML thủ công. (Bạn có thể thực hiện thủ công bằng cách viết một hàm phát ra trường và sau đó kết nối chức năng đó với hành động "wpmu_options", được chạy ở cuối trang Cài đặt trong Quản trị mạng. Nhưng sau đó, bạn cũng phải xử lý các trường hợp khác và mọi thứ khác bằng tay.)

Vấn đề thứ hai có lẽ liên quan đến việc tìm kiếm một hành động chạy khi người dùng nhấn "Lưu" trên trang Cài đặt quản trị mạng, nhưng tôi chưa thể tìm thấy hành động đó. Bất kỳ sự chỉ đạo nào cũng đều được đánh giá cao.

Vậy - suy nghĩ? Có cách nào hay để cho phép quản lý các tùy chọn liên kết trang web cho plugin thông qua khu vực Quản trị mạng mới không? Nếu vậy, nó được thực hiện như thế nào?

Câu trả lời:


11

Có một wpmu_optionshành động cho phép bạn nối thêm HTML trên trang Cài đặt mạng.

Nếu bạn muốn thêm menu / trang phụ của riêng bạn vào menu cha mẹ Cài đặt:

add_action('network_admin_menu', 'add_my_netw_settings_page');
function add_my_netw_settings_page() {
  add_submenu_page(
       'settings.php',
       'Co za asy',
       'Co za asy',
       'manage_network_options',
       'my-netw-settings',
       'your_form'
  );    
}

function your_form(){
  $options = get_site_option('your_plugin');

  ?>
  <form action="<?php echo admin_url('admin-post.php?action=update_my_settings'); ?>" method="post">
    <?php wp_nonce_field('your_plugin_nonce'); ?>

    ...fields go here...

  </form>
  <?php
}

xử lý lưu:

add_action('admin_post_update_my_settings',  'update_my_settings');
function update_my_settings(){     
  check_admin_referer('your_plugin_nonce');
  if(!current_user_can('manage_network_options')) wp_die('FU');

  // process your fields from $_POST here and update_site_option

  wp_redirect(admin_url('network/settings.php?page=my-netw-settings'));
  exit;  
}

Giữ trình xử lý lưu nếu bạn chọn sử dụng hành động mà tôi đã đề cập ở trên và móc biểu mẫu vào hành động đó.


1
Đây là một bài viết mô tả về cơ bản cùng một cách tiếp cận: xplus3.net/2011/07/13/wordpress-network-admin-pages
mltsy

1

Về cơ bản, nếu bạn không muốn tạo trang cài đặt quản trị mạng của riêng mình, bạn sẽ cần sử dụng cả hai móc được đề cập riêng trong hai câu trả lời khác:

add_filter( 'wpmu_options' , 'show_network_settings' );
add_action( 'update_wpmu_options', 'save_network_settings' );

function save_network_settings() {
  // checkbox example
  if( isset( $_POST['my_network_checkbox'] ) )
    update_site_option( 'my_network_checkbox', '1' );

  // textfield example
  if( isset( $_POST['my_network_textfield'] ) )
    update_site_option( 'my_network_textfield', sanitize_text_field($_POST['my_network_textfield']) );
}

function show_network_settings() {
    $checkbox = get_site_option('my_checkbox'); 
    $text = get_site_option('my_text'); 
    ?>
    <h3><?php _e('My Network Settings','my-plugin'); ?></h3>
    <table class="form-table">
        <tbody>
            <tr>
                <th scope="row"><?php _e('My Checkbox','my-plugin'); ?></th>
                <td>
                    <label>
                        <input type='checkbox' name='my_checkbox' value='1' <?php checked( $checkbox, '1' ); ?> /> 
                    <?php _e('Check my box.','my-plugin'); ?>
                    </label>
                </td>
            </tr>
            <tr>
                <th scope="row"><label for="my_text"><?php _e('My Text','my-plugin'); ?></label></th>
                <td>
                        <input type='text' name='my_text' value='<?php echo $text; ?>' />
                </td>
            </tr>
        </tbody>
    </table>
    <?php
}

Để được giải thích rất rõ ràng và mẫu mã hữu ích, hãy xem http://zao.is/2013/07/adding-sinstall-to-network-sinstall-for-wordpress-multisite/


0

Tôi e rằng phương pháp duy nhất tôi biết là phương pháp bạn đã đề cập về cách tự chèn html và tự xử lý các bản cập nhật của các tùy chọn. Hành động bạn cần sử dụng để lưu các tùy chọn của mình là update_wpmu_options. Nếu cần tôi có thể cung cấp một ví dụ chi tiết hơn, chỉ cần cho tôi biết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.