When I use the settings API in a multisite installation and the options page sits at the network level, posting the options to options.php
does not work, because the administration page sits at wp-admin/network
and WP expects the page to be at wp-admin
.
I added a function that checks whether this WP installation is a multsite installation (via the constant) and if it is, it changes the form’s action value to ../option.php
. This saves the options OK, but the default message “Settings saved.” is missing (however, the query string does include settings-updated=true
).
Any thoughts on how to get the message to appear?
For network option pages the correct form action URL is:
wp-admin/network/edit.php?action=your_option_name
Then you have to register a callback:
add_action(
'network_admin_edit_your_option_name',
'your_save_network_options_function'
);
In that callback function inspect the $_POST
data, prepare the values, then save them:
update_site_option( $this->option_name, $this->option_values );
And then you have to create the redirect without further help:
// 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;
On the options page check $_GET['updated']
, and add an admin notice if you found that parameter.