Show admin notice on incorrect value on form field

by Sema   Last Updated September 12, 2019 04:08 AM

So I'm still learning about the Settings API on WordPress and can't seem to figure out how to handle admin notices on an empty database and then have validation.

What currently happens:

On load, with the empty value in the database it shown an admin panel (Don't need this on initial load)

What I'll like to do:
- Show admin notice on correct validation using the script at the bottom.
- How can I validate and reuse the 'valid' option if an user enters a bad value later?

Image for reference: enter image description here

Registration:

function register_insta_heading()
{
    add_settings_section(
        "", //1. Linked to: add_settings_section(section)
        "", //Section title
        null,
        "insta_heading_field"); //1. Linked to: add_settings_field(page)

    add_settings_field(
        "",
        "Heading", //Add the 'Access Token' title
        "heading_display", //Call posts_number_display function
        "insta_heading_field", //2. Linked to: do_settings_field
        "");

    register_setting(
        'instagram-settings',
        'insta_heading' );
}

Display:

function heading_display() {
    ?>
    <label for="insta_heading">
        <?php if (empty(get_option('insta_heading'))): ?>
            <div class="notice notice-error is-dismissible">
                <p><?php _e('Please input a module heading', 'instagram-enabler'); ?></p>
            </div>
            <input type="text" name="insta_heading" id="insta_heading" value="<?php echo get_option('insta_heading'); ?>" size="64" class="regular-text code" />
        <?php else: ?>
            <input type="text" name="insta_heading" id="insta_heading" value="<?php echo get_option('insta_heading'); ?>" size="64" class="regular-text code" />
        <?php endif; ?>
    </label>
    <p class="description">
        <?php _e("Enter the module heading", "instagram-enabler"); ?>
    </p>
    <?php
}
add_action( 'admin_init', 'register_insta_heading' );

Show:

function instagram_showpage() {
    ?>
    <div class="wrap">
    <h2>Instagram</h2>
    <form method="post" action="options.php">
        <table class="form-table">
            <?php
                settings_fields( 'instagram-settings' );
                do_settings_sections("insta_heading_field");
                submit_button();
            ?>
        </table>
    </form>
    </div><?php
}

So I found this script online and would like to utilize it for the heading section:

function sanitize_number_callback ($input){

    if( !preg_match( '/...regex for valid here.../', $input ) ){
        add_settings_error(
            'my_option',
            esc_attr( 'my_option' ), //becomes part of id attribute of error message
            __( 'Number must be a positive integer', 'wordpress' ), //default text zone
            'error'
        );
        $input = get_option( 'my_option' ); //keep old value
    }

    return $input;
}


Related Questions


How to save plugin custom settings page fields

Updated August 17, 2017 09:08 AM



Plugin Options Won't Get Saved

Updated March 10, 2018 20:08 PM

options.php not found when saving Theme Settings

Updated August 07, 2018 02:08 AM