Generating User(s) with Settings API

I am trying to create a plugin that will generate users. I am pretty new to Wordpress and my PHP is ehhhh. The idea for it is for the plugin to generate multiple users when its finished. Right now though I am just trying to get it to generate one. But I am having issues trying to do so, any ideas?

Once I click Submit, I get a 'Settings Saved'. So, I believe that means the form went through but no user shows up in the DB. I imagine I am not getting the information in the form or executing my function properly.

?php
function sl_add_options_page() {
    // Add new page under the "Settings tab
    add_options_page(
        __( 'User Options' ),
        __( 'User Options' ),
        'manage_options',
        'user_options_page',
        'sl_render_options_page'
    );
}

add_action( 'admin_menu', 'sl_add_options_page' );

function sl_render_options_page() {
    ?
    div class="wrap"
        h2?php _e( 'Content  User Generator Options' ); ?/h2
        form action="options.php" method="post"
            ?php settings_fields( 'num_users' ); ?
            ?php do_settings_sections( 'user_options_page' ); ?
            p class="submit"
                input type="submit" name="submit" id="submit" class="button button-primary" value="?php _e( 'Submit' ); ?"
            /p
        /form
    /div
    ?php
}

function sl_add_setting() {
    // Register a binary value called "pimple_disable"
    register_setting(
        'num_users',
        'num_users',
        'absint'
    );

    // Add the settings section to hold the interface
    add_settings_section(
        'user_main_settings',
        __( 'User Controls' ),
        'sl_render_main_settings_section',
        'user_options_page'
    );

    // Add the settings field to define the interface
    add_settings_field(
        'user_main_settings_field',
        __( 'How Many users' ),
        'sl_render_users_input',
        'user_options_page',
        'user_main_settings',
        'sl_wp_create_user'
    );
}

add_action( 'admin_init', 'sl_add_setting' );

function sl_wp_create_user($username, $password, $email) {
    $num_users = intval( $_GET['num_users'] );
    $username = 'Testing';
    $email = '[email protected]';
    $password = wp_generate_password( 12, false );

    for( $j = 0; $j  $num_users; $j++ ) { 

        $user_login = esc_sql( $username );
        $user_email = esc_sql( $email    );
        $user_pass = $password;

        $userdata = compact('user_login', 'user_email', 'user_pass');
        return wp_insert_user($userdata);
    }

    echo 'div id="message" class="updated fade"pstrong' . $num_users . ' Users created/strong/p/div';
}

function sl_render_main_settings_section() {
    echo 'pMain settings for the Content and User Generator plugin./p';
}

function sl_render_users_input() {
    echo 'input id="num_users" name="num_users" type="input" value=""  /';
}

Topic wp-create-user settings-api plugin-development users Wordpress

Category Web


You are using add_settings_field wrong: the function sl_wp_create_user is being passed as $args (and you probably don't need any args), and it should be the sanitize callback for register_settings.

Make the input like:

function sl_render_users_input() {
    echo '<input id="num_users[value]" name="num_users[value]" type="input" value=""  />';
}

And the sanitize function:

function sl_wp_create_user( $input ) {
    if( isset( $input['value'] ) ) {
        // do your thing
    }
}

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.