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?

2 s
2

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.

Leave a Reply

Your email address will not be published. Required fields are marked *