I'm writing a plugin with a settings/option page and I want some php code to be executed whenever someone saves the settings on that page and that page alone. Which actions do I need to hook into to accomplish this?


If you're using Settings API, then you should use a sanitize callback:

register_setting( $option_group, $option_name, $sanitize_callback );

The myth is that the $sanitize_callback actually is a filter for your options when it's saved in the database. This is the place where you can do something with your custom code.

This is the sample code:

register_setting( 'wpse38180', 'wpse38180', 'sanitize_wpse38180' );

function sanitize_wpse38180( $options )
    // Do anything you want

    return $options;

There is a pre-update filter, applied just after the sanitize filter. It's called pre_update_option_optionname and takes the new and old values of the option as parameters. Use it like this:

register_setting( $my_option_group , $my_option_name );
// 10 is the filter priority, 2 is the number of arguments
add_filter( 'pre_update_option_' . $my_option_name , 'my_callback', 10, 2 );

function my_callback( $newvalue, $oldvalue ) {
    // $newvalue has already been sanitized, but not yet saved
    // do whatever you like here
    return 'filtered value';

The benefit of using this is that the intent is clearer, and you don't have to manually get the old option value (if you need it) since it's passed in for you.

This filter is specific to a field, so if you want it to run once when saving options, just add it to only one field.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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