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:


Then you have to register a callback:


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
        array( 'page' => 'your_options_page_slug', 'updated' => 'true' ),
        (is_multisite() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' ))

On the options page check $_GET['updated'], and add an admin notice if you found that parameter.

  • So the Settings API is not available on network admin pages? And what @NightHawk had originally done, was actually saving options to the main blog of the network and not saving them site-wide, right? – Parham Jan 14 '14 at 21:45
  • @Parham I haven’t seen his code, but I know most parts of the Settings API are either not available on network pages, or they behave in strange ways. There is no need to use that. – fuxia Jan 14 '14 at 21:50

I've been using @toscho's answer which works great, however in certain wordpress install paths the hard-coded form action URL won't work. Here @birgire states how to build the correct URL:

When referring to urls within the network-admin, you should consider the network_admin_url(). core function, that falls back to admin_url() for non-multisite setups.

echo esc_url( 
       network_admin_url( 'edit.php' ) 

protected by Community Oct 6 '14 at 9:27

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.