ネットワーク設定画面で新しいサイト全体のオプションのフィールドを追加するにはどうすればよいですか?


15

私はプラグインに取り組んでおり、その一部には、WordPressネットワーク内のすべてのサイトに適用されるオプション値の設定が含まれます。値をwp_sitemetaテーブルに保存できるadd_site_optionおよびget_site_option関数については知っていますが、WordPressバックエンドの適切な場所にフィールドを配置する方法と、サイト全体の保存をインターセプトする方法がわかりませんそれが発生したときにadd_site_option呼び出しを挿入するための値。

最初の問題(フィールドの追加)では、通常、設定API、具体的にはregister_settingadd_settings_fieldを使用します、新しいオプションをホワイトリストに登録してから、適切なオプションページにそのフィールドを挿入します。しかし、add_settings_fieldを使用して、バックエンドの新しいNetwork Adminセクションの[Settings]ページにフィールドを追加できるかどうか、ネットワーク管理ページに対して機能する代替機能がある場合、またはHTMLを手動で挿入するだけです。(フィールドをエコーアウトする関数を記述し、その関数を「wpmu_options」アクションに接続することで手動で実行できます。「wpmu_options」アクションは、ネットワーク管理の「設定」ページの最後で実行されます。その他はすべて手動で。)

2番目の問題は、おそらく、ユーザーが[ネットワーク管理設定]ページで[保存]をクリックしたときに実行されるアクションを見つけることですが、まだ見つかりませんでした。どんなリードも大歓迎です。

だから-考え?新しいネットワーク管理領域を介してプラグインのサイト全体のオプションを管理できるエレガントな方法はありますか?もしそうなら、それはどうですか?

回答:


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
基本的に同じアプローチを説明する記事は次のとおり
2011/

1

基本的に、独自のネットワーク管理設定ページを作成したくない場合は、他の2つの回答で別々に言及されている両方のフックを使用する必要があります。

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.