Extend plugin options page

If a third party plugin (the plugin you want to extend) uses the Settings API, you can add a new setting field if you now the options page and option group defined by the third party plugin. Just use the Settings APT too:

  • First, with add_setting_field() you can add a new field to any settings section defined by the the third plugin.
  • Second, with register_setting() you can register a new setting within the option group defined by the plugin.

A very quick example:

add_action( 'admin_init', 'cyb_add_settings_field_to_plugin' );
function cyb_add_settings_field_to_plugin() {

    add_settings_field(
        'some_id',
        'Some title',
        'cyb_field_callback',
        'plugin-settins-page', // Settings page defined by the third party plugin
        'plugin-settings-section', // Section defined by the third party plugin
        array()
    );

    register_setting(
        'option-group', // Options group defined by third party plugin
        'my-option-name', // Custom option name
        'cyb_sanitize_callback' // Sanitize
    );

}

function cyb_field_callback() {
    $value = get_option( 'my-option-name' );
    ?>
    <input type="text" id="some_id" name="my-option-name" value="<?php echo esc_attr( $value ); ?>" />
    <?php
}

function cyb_sanitize_callback( $inputs ) {
    // Do sanitization of the the inputs
    return $inputs;
}

If you wish, you can add new sections as well:

add_action( 'admin_init', 'cyb_add_settings_field_to_plugin' );
function cyb_add_settings_field_to_plugin() {

    add_settings_section(
        'new-settings-section',
        'Settings Section Title',
        'cyb_print_section_info', // Callback
        'plugin-settins-page' // Settings page defined by the third party plugin
    );  
    add_settings_field(
        'some_id',
        'Some title',
        'cyb_field_callback',
        'plugin-settins-page', // Settings page defined by the third party plugin
        'new-settings-section', // My custom section defined above
        array()
    );
    register_setting(
        'option-group', // Options group defined by third party plugin
        'my-option-name', // Option name
        'cyb_sanitize_callback' // Sanitize
    );
}

function cyb_print_section_info() {
    echo 'Section info';
}

function cyb_field_callback() {
    $value = get_option( 'my-option-name' );
    ?>
    <input type="text" id="some_id" name="my-option-name" value="<?php echo esc_attr( $value ); ?>" />
    <?php
}

function cyb_sanitize_callback( $inputs ) {
    // Do sanitization of the the inputs
    return $inputs;
}