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


8

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

我添加了一个功能,用于检查此WP安装是否为多站点安装(通过常量),如果是,则将表单的操作值更改为../option.php。这将保存选项“确定”,但会保存默认消息“设置已保存”。丢失(但是查询字符串包含settings-updated=true)。

关于如何使消息出现的任何想法?

Answers:


11

对于网络选项页面,正确的表单操作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'],如果找到该参数,请添加管理员通知。


因此,Settings API在网络管理页面上不可用吗?@NightHawk最初所做的实际上是将选项保存到网络的主博客,而不是在整个站点范围内保存,对吗?
帕勒姆(Parham)2014年

@Parham我还没有看到他的代码,但是我知道Settings API的大部分内容在网络页面上不可用,或者它们的行为很奇怪。不需要使用它。
fuxia

0

我一直在使用@toscho的答案,效果很好,但是在某些wordpress安装路径中,硬编码的表单操作URL无法使用。@birgire在此说明如何构建正确的URL

在network-admin中引用URL时,应考虑network_admin_url()。核心功能,对于非多站点设置,该功能将回退到admin_url()。

echo esc_url( 
    add_query_arg( 
       'action', 
       'your_option_name', 
       network_admin_url( 'edit.php' ) 
    )
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.