Show admin notice on incorrect value on form field

enter image description here

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:

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;
}

Read more here:: Show admin notice on incorrect value on form field

Leave a Reply

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