当前位置: 首页>>技术教程>>正文


如何在网络设置屏幕上为新的site-wide选项添加字段?

webfans 技术教程 , , , , , 去评论

问题描述

我正在处理插件,其中一部分涉及设置适用于WordPress网络中所有网站的选项值。我知道add_site_optionget_site_option函数可以将值保存到wp_sitemeta表中,但我无法弄清楚如何将字段放在WordPress后端的适当位置,以及如何拦截整个网站的保存值,以便在发生这种情况时插入add_site_option调用。

对于第一个问题(添加字段),我通常会使用Settings API,特别是register_settingadd_settings_field,将新选项列入白名单,然后在相应的选项页面中插入一个字段。但我无法在任何地方找到有关是否可以使用add_settings_field在后端的新网络管理部分的“设置”页面中添加字段的信息,如果有替代功能可以执行它对网络管理员页面的操作,或者如果您只需手动注入HTML。 (您可以通过编写一个回显该字段的函数手动完成,然后将该函数连接到”wpmu_options”操作,该操作将在网络管理员的“设置”页面的末尾运行。但是您还必须处理随机数和一切否则手动。)

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

那么 – 想法?是否有一种优雅的方式允许通过新的网络管理区域管理插件的全站选项?如果是这样,它是如何完成的?

最佳解决思路

有一个wpmu_options操作,允许您在“网络设置”页面上添加更多HTML。

如果要将自己的sub-menu /页面添加到“设置”父菜单:

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

如果您选择使用我上面提到的操作,请保留保存处理程序,并将表单挂钩到该操作。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2683.html,转载请务必附带本地址声明。