Ağ Ayarları ekranında site genelinde yeni seçenek için alan nasıl eklenir?


15

Bir eklenti üzerinde çalışıyorum ve bunun bir kısmı bir WordPress ağındaki tüm siteler için geçerli bir seçenek değeri ayarlamayı içerir. Add_site_option ve get_site_option hakkında biliyorum wp_sitemeta tabloya değeri kaydetmek sağlayan fonksiyonları , ama anlayamıyorum ne WordPress arka ucunda uygun bir yerde alanları yerleştirmek ve nasıl sitewide kaydetme müdahale Bu gerçekleştiğinde add_site_option çağrısını eklemek için

İlk sorun için (alanları ekleyerek), normalde Ayarlar API'sını, özellikle register_setting ve add_settings_field, yeni seçeneği beyaz listeye eklemek ve ardından uygun seçenekler sayfasına bir alan eklemek için. Ancak, arka ucun yeni Ağ Yöneticisi bölümündeki Ayarlar sayfasına bir alan eklemek için add_settings_field kullanıp kullanamayacağınız, Ağ Yönetici sayfaları için yaptığı işi yapan alternatif bir işlev varsa veya HTML'yi manuel olarak enjekte etmeniz yeterlidir. (Alanın yankılanmasını sağlayan bir işlev yazıp, ardından bu işlevi Ağ Yöneticisi'ndeki Ayarlar sayfasının sonunda çalıştırılan "wpmu_options" eylemine bağlayarak manuel olarak yapabilirsiniz. ve diğer her şeyi manuel olarak yapabilirsiniz.)

İkinci sorun muhtemelen, kullanıcı Ağ Yönetici Ayarları sayfasında "Kaydet" i tıkladığında çalışan bir işlem bulmayı içerir, ancak henüz bulamadım. Herhangi bir olası satış çok takdir edilecektir.

Yani - düşünceler? Yeni Ağ Yöneticisi alanı aracılığıyla bir eklenti için site genelinde seçeneklerin yönetilmesine izin vermenin zarif bir yolu var mı? Eğer öyleyse, nasıl yapılır?

Yanıtlar:


11

wpmu_optionsAğ Ayarları sayfasında daha fazla HTML eklemenizi sağlayan bir işlem var.

Ayarlar üst menüsüne kendi alt menünüzü / sayfanızı eklemek istiyorsanız:

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
}

kaydetme işleyicisi:

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

Yukarıda bahsettiğim eylemi kullanmayı seçerseniz kaydetme işleyicisini saklayın ve formu bu eyleme bağlayın.


1
Temel olarak aynı yaklaşımı açıklayan bir makale: xplus3.net/2011/07/13/wordpress-network-admin-pages
mltsy

1

Temel olarak, kendi ağ yöneticisi ayarları sayfanızı oluşturmak istemiyorsanız, diğer iki cevapta ayrı olarak belirtilen her iki kancayı kullanmanız gerekir:

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
}

Çok net bir açıklama ve faydalı kod örneği için bkz. Http://zao.is/2013/07/adding-settings-to-network-settings-for-wordpress-multisite/


0

Korktuğum tek yöntem, html'yi manuel olarak enjekte etmenin ve seçeneklerin güncellemelerini kendiniz ele almanın bahsettiği yöntem olduğundan korkuyorum. Seçeneklerinizi kaydetmek için kullanmanız gereken eylem update_wpmu_options şeklindedir. Gerekirse daha ayrıntılı bir örnek verebilirim, sadece bana bildirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.