Using the WordPress Settings API with Network Admin pages

The other day I was googling up information about coding options pages in the network administration dashboard of a WordPress multisite installation and I noticed that some people think they cannot use the Settings API with those pages. I also noticed there was no article showing how to do it, so here it is.

Following is the documented code you need to create a network options page using the WordPress Settings API. You can also go to GitHub and download a fully functional plugin that demonstrates that code, I added a normal options page in the plugin so that you can compare the code.

If you have any remark or question just use the comment section.


					

13 thoughts on “Using the WordPress Settings API with Network Admin pages

      1. Asu

        BTW, you don’t need to call apply_filters('sanitize_option_' . $option_name, $_POST[$option]);, because when calling update_site_option(), this filter will also be called.

        Reply
  1. Alex Georgiou

    Thank you so much, your code worked perfectly!

    I just want to say for the benefit of anyone else reading this that I am using WordPress 4.8 and I had to change the redirect target from settings.php to admin.php.

    Reply
  2. Pingback: The wacky world of network activated WordPress plugins in multisite

  3. Florian

    Hi Claude,

    thanks for the really helpful post! :)

    Regarding the redirect target: For me it works great with settings.php also in 4.8.

    Cheers,
    Florian

    Reply
  4. Patrick

    Your `add_filter(‘network_admin_menu’, ‘post3872_network_admin_menu’);` line should probably be `add_action(‘network_admin_menu’, ‘post3872_network_admin_menu’);` (since you’re not filtering anything).

    Reply
  5. Nick

    Still working through trying to get this working. So far, it doesn’t seem that the options are saving.

    Side note: As part of working through this, I noticed that core changed `$new_whitelist_options` to `$new_allowed_options` here: https://core.trac.wordpress.org/changeset/48477

    Anyway, is this code working for others? I’ve hit a bit of a wall.

    Reply
    1. Nick

      EDIT: Correction. This is working as-is. When trying to change the checkbox field to a text field, it doesn’t save.

      Reply

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.