多站点中的设置API-缺少更新消息

时间:2012-09-12 作者:NightHawk

当我在多站点安装中使用设置API时,选项页面位于网络级别,将选项发布到options.php 不工作,因为管理页面位于wp-admin/network WP希望页面位于wp-admin.

我添加了一个函数,用于检查此WP安装是否是多站点安装(通过常量),如果是,则将表单的动作值更改为../option.php. 这将保存选项OK,但默认消息“Settings saved”(设置已保存)缺少(但是,查询字符串不包括settings-updated=true).

如何让信息显示出来,有什么想法吗?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

对于网络选项页,正确的表单操作URL为:

wp-admin/network/edit.php?action=your_option_name
然后您必须注册回调:

add_action( 
    \'network_admin_edit_your_option_name\', 
    \'your_save_network_options_function\' 
);
在该回调函数中,检查$_POST 数据,准备值,然后保存:

update_site_option( $this->option_name, $this->option_values );
然后您必须创建重定向,无需进一步帮助:

// redirect to settings page in network
wp_redirect(
    add_query_arg(
        array( \'page\' => \'your_options_page_slug\', \'updated\' => \'true\' ),
        (is_multisite() ? network_admin_url( \'admin.php\' ) : admin_url( \'admin.php\' ))
    )
);
exit;
在选项页上检查$_GET[\'updated\'], 如果发现该参数,请添加管理员通知。

SO网友:jgangso

我一直在使用@toscho的答案,效果很好,但是在某些wordpress安装路径中,硬编码的表单操作URL将不起作用。Here @birgire states how to build the correct URL:

在network admin中引用url时,应考虑network\\u admin\\u url()。核心函数,对于非多站点设置,可返回admin\\u url()。

echo esc_url( 
    add_query_arg( 
       \'action\', 
       \'your_option_name\', 
       network_admin_url( \'edit.php\' ) 
    )
);

结束