วิธีเพิ่มฟิลด์สำหรับตัวเลือกทั่วไซต์ใหม่บนหน้าจอการตั้งค่าเครือข่าย


15

ฉันกำลังทำงานกับปลั๊กอินและส่วนหนึ่งของมันเกี่ยวข้องกับการตั้งค่าตัวเลือกที่ใช้กับไซต์ทั้งหมดในเครือข่าย WordPress ฉันรู้เกี่ยวกับadd_site_optionและget_site_optionฟังก์ชั่นที่ช่วยให้คุณประหยัดค่าลงในตาราง wp_sitemeta แต่สิ่งที่ฉันไม่สามารถคิดออกเป็นวิธีการที่จะวางเขตข้อมูลในสถานที่ที่เหมาะสมในการแบ็กเอนด์ WordPress และวิธีการที่จะสกัดกั้นการประหยัดจากทั่วทั้งไซต์ ค่าเพื่อแทรกการเรียก add_site_option เมื่อเกิดขึ้น

สำหรับปัญหาแรก (เพิ่มเขตข้อมูล) ปกติแล้วฉันจะใช้การตั้งค่า API โดยเฉพาะregister_settingและadd_settings_fieldเพื่อกำหนดรายการใหม่ให้เป็นรายการที่ปลอดภัยแล้วแทรกเขตข้อมูลลงในหน้าตัวเลือกที่เหมาะสม แต่ฉันไม่สามารถหาข้อมูลได้ทุกที่ในว่าคุณสามารถใช้ add_settings_field เพื่อเพิ่มฟิลด์ไปยังหน้าการตั้งค่าในส่วนผู้ดูแลเครือข่ายใหม่ของแบ็กเอนด์หากมีฟังก์ชั่นทางเลือกที่ทำหน้าที่เป็นหน้าที่ของผู้ดูแลระบบเครือข่ายหรือ เพียงแค่ต้องฉีด HTML ด้วยตนเอง (คุณสามารถทำได้ด้วยตนเองโดยการเขียนฟังก์ชั่นที่สะท้อนฟิลด์แล้วเชื่อมต่อฟังก์ชั่นนั้นเข้ากับการกระทำ "wpmu_options" ซึ่งได้รับการเรียกใช้ที่ส่วนท้ายของหน้าการตั้งค่าใน Network Admin แต่คุณต้องจัดการกับข้อมูลที่ไม่ใช่ และทุกอย่างอื่นด้วยตนเอง)

ปัญหาที่สองอาจเกี่ยวข้องกับการค้นหาการกระทำที่ทำงานเมื่อผู้ใช้กด "บันทึก" ในหน้าการตั้งค่าผู้ดูแลเครือข่าย แต่ฉันยังไม่พบสิ่งนั้น โอกาสในการขายใด ๆ จะได้รับการชื่นชมอย่างมาก

ดังนั้น - ความคิด? มีวิธีหรูหราในการอนุญาตการจัดการตัวเลือกไซต์สำหรับปลั๊กอินผ่านพื้นที่ผู้ดูแลระบบเครือข่ายใหม่หรือไม่? ถ้าเป็นเช่นนั้นมันเป็นอย่างไรบ้าง?

คำตอบ:


11

มีการwpmu_optionsกระทำที่ช่วยให้คุณผนวก HTML เพิ่มเติมในหน้าการตั้งค่าเครือข่าย

หากคุณต้องการเพิ่มเมนูย่อย / เพจของคุณเองในเมนูพาเรนต์การตั้งค่า:

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
}

ตัวจัดการบันทึก:

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;  
}

รักษาตัวจัดการบันทึกหากคุณเลือกที่จะใช้การกระทำที่ฉันกล่าวถึงข้างต้นและขอแบบฟอร์มไปยังการกระทำนั้น


1
นี่คือบทความที่อธิบายถึงวิธีการเดียวกันโดยทั่วไป: xplus3.net/2011/07/13/wordpress-network-admin-pages
mltsy

1

โดยทั่วไปหากคุณไม่ต้องการสร้างหน้าการตั้งค่าผู้ดูแลระบบเครือข่ายของคุณเองคุณจะต้องใช้ตะขอทั้งสองที่กล่าวถึงแยกกันในอีกสองคำตอบ:

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
}

สำหรับคำอธิบายที่ชัดเจนและตัวอย่างโค้ดที่มีประโยชน์โปรดดูที่http://zao.is/2013/07/adding-settings-to-network-settings-for-wordpress-multisite/


0

ฉันกลัวว่าวิธีเดียวที่ฉันรู้ก็คือวิธีที่คุณพูดถึงการฉีด html ด้วยตนเองและจัดการกับการปรับปรุงตัวเลือกต่างๆด้วยตนเอง การกระทำที่คุณต้องใช้เพื่อบันทึกตัวเลือกของคุณคือ update_wpmu_options หากจำเป็นฉันสามารถให้รายละเอียดเพิ่มเติมตัวอย่างเพียงแจ้งให้เราทราบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.