नेटवर्क सेटिंग्स स्क्रीन पर नए साइट-वाइड विकल्प के लिए फ़ील्ड कैसे जोड़ें?


15

मैं एक प्लगइन पर काम कर रहा हूं, और इसके एक हिस्से में एक विकल्प मूल्य सेट करना शामिल है जो एक वर्डप्रेस नेटवर्क में सभी साइटों पर लागू होता है। मुझे Add_site_option और के बारे में पता है get_site_option फ़ंक्शंस के आपको wp_sitemeta तालिका में मान को सहेजने देते हैं, लेकिन जो मैं समझ नहीं पा रहा हूं वह है कि वर्डप्रेस बेंड में उपयुक्त स्थान पर फ़ील्ड्स को कैसे रखा जाए, और साइटवॉइड की बचत को कैसे रोकें जब ऐसा होता है, तो add_site_option कॉल सम्मिलित करने के लिए मान।

पहली समस्या के लिए (खेतों को जोड़ते हुए), मैं आम तौर पर विशेष रूप से सेटिंग्स एपीआई का उपयोग करता हूं register_setting और add_settings_field, नए विकल्प को श्वेतसूची में करने के लिए और फिर उचित विकल्प पृष्ठ में इसके लिए एक फ़ील्ड सम्मिलित करें। लेकिन मैं कहीं भी इस बारे में जानकारी नहीं पा सकता कि क्या आप add_settings_field का उपयोग करके बैकएंड के नए नेटवर्क एडमिन सेक्शन में सेटिंग्स पेज में फ़ील्ड जोड़ सकते हैं, यदि कोई वैकल्पिक फ़ंक्शन है जो नेटवर्क एडमिन पेजों के लिए क्या करता है, या यदि आप बस HTML को मैन्युअल रूप से इंजेक्ट करना होगा। (आप इसे मैन्युअल रूप से एक फ़ंक्शन लिखकर कर सकते हैं जो फ़ील्ड को echoes करता है और फिर उस फ़ंक्शन को "wpmu_options" क्रिया से जोड़ता है, जो नेटवर्क व्यवस्थापक में सेटिंग्स पृष्ठ के अंत में चलता है। लेकिन फिर आपको गैर-से भी निपटना होगा। और मैन्युअल रूप से सब कुछ।)

दूसरी समस्या में संभवतः एक एक्शन ढूंढना शामिल है जो तब चलता है जब उपयोगकर्ता नेटवर्क एडमिन सेटिंग्स पेज पर "सेव" को हिट करता है, लेकिन मैं अभी तक इसे खोजने में असमर्थ रहा हूं। किसी भी सुराग बहुत सराहना की जाएगी।

तो - विचार? नए नेटवर्क व्यवस्थापक क्षेत्र के माध्यम से एक प्लगइन के लिए साइटवॉइड विकल्पों के प्रबंधन की अनुमति देने का एक सुंदर तरीका है? यदि हां, तो यह कैसे किया गया है?

जवाबों:


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

मुझे डर है कि एकमात्र विधि जिसके बारे में मुझे पता है, वह वह विधि है जिसका आपने मैन्युअल रूप से एचटीएमएल को इंजेक्ट करने और स्वयं विकल्पों के अपडेट से निपटने का तरीका बताया है। अपने विकल्पों को सहेजने के लिए आपको जिस क्रिया का उपयोग करने की आवश्यकता है, वह है अपडेट_wpmu_options। यदि आवश्यक हो तो मैं एक अधिक विस्तृत उदाहरण प्रदान कर सकता हूं, बस मुझे बताएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.