如何在网络设置屏幕上为新的站点范围选项添加字段?

时间:2011-05-05 作者:jalefkowit

我正在开发一个插件,其中一部分涉及设置一个适用于WordPress网络中所有站点的选项值。我知道add_site_optionget_site_option 允许您将值保存到wp\\u sitemeta表中的函数,但我不知道如何将字段放置在WordPress后端的适当位置,以及如何拦截站点范围值的保存,以便在发生这种情况时插入add\\u site\\u选项调用。

对于第一个问题(添加字段),我通常会使用设置API,特别是register_settingadd_settings_field, 将新选项列入白名单,然后将其字段插入相应的选项页面。但是我在任何地方都找不到关于是否可以使用add\\u settings\\u field将字段添加到后端的新网络管理部分的设置页面,是否有替代功能可以执行网络管理页面的功能,或者是否只需要手动注入HTML。(您可以手动执行此操作,方法是编写一个回显字段的函数,然后将该函数连接到“wpmu\\u options”操作,该操作将在Network Admin的“设置”页面的末尾运行。但是,您还必须手动处理nonce和其他所有内容。)

第二个问题可能涉及查找当用户在网络管理设置页面上点击“保存”时运行的操作,但我还没有找到。任何线索都将不胜感激。

那么——想法?是否有一种优雅的方法可以通过新的网络管理区域管理插件的站点范围选项?如果是,是如何做到的?

3 个回复
SO网友:onetrickpony

有一个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;  
}
如果选择使用上述操作,请保留保存处理程序,并将表单挂接到该操作。

SO网友:RavanH

基本上,如果您不想创建自己的网络管理员设置页面,则需要使用另外两个答案中分别提到的两个挂钩:

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/

SO网友:BjornW

恐怕我知道的唯一方法就是你提到的手动注入html并自己处理选项更新的方法。保存选项所需的操作是update\\u wpmu\\u options。如果需要,我可以提供一个更详细的例子,请告诉我。

结束

相关推荐

从前端保存主题选项(options.php)

我试图从前端保存一个选项,但我还找不到如何保存<因此,我们的想法是为博客所有者提供一个简单的表单,其中包含一个下拉列表,可以选择不同的样式表。css。我已经为wp管理区域构建了它,它运行良好,但我想在前端也这样做,我已尝试包括wp管理/选项。我将表单发布到“wp admin/options.php”,但它在wp admin/options页面中重定向了我。这是前端表单:<form id=\"save-theme\" name=\"save-theme\" action=\"/wp-admin/