Wordpress程序化用户创建和自动登录

时间:2015-07-26 12:37:26

标签: php wordpress authentication registration

我正在尝试创建自定义用户,然后以编程方式记录它们,之后我想将它们重定向到付款页面。

我在主题的functions.php文件中有以下代码:

function sp_registration_process_hook() {

    if (isset($_POST['adduser']) && isset($_POST['add-nonce']) && wp_verify_nonce($_POST['add-nonce'], 'add-user')) {
        // die if the nonce fails
        if ( !wp_verify_nonce($_POST['add-nonce'],'add-user') ) {
            wp_die('Sorry! That was secure, guess you\'re cheatin huh!');
        } else {

            //create a new role
            remove_role( 'service_provider' );
            $result = add_role(
                'service_provider',
                __( 'Service Provider' ),
                array(
                    'read'         => true,  // true allows this capability
                    'edit_posts'   => true,
                    'delete_posts' => true, // Use false to explicitly deny
                    'level_0'      => true,
                    'level_1'      => true
                )
            );

            // auto generate a password
            $user_pass = wp_generate_password();

            echo $user_pass;

            $user_login = esc_attr( $_POST['user_name'] );
            $user_email = esc_attr( $_POST['email'] );

            // setup some error checks
            if ( !$user_login ) {
                $error = 'A username is required for registration.';
            }
            elseif ( username_exists($user_login) ) {
                $error = 'Sorry, that username already exists!';
            }
            elseif ( !is_email($user_email, true) ) {
                $error = 'You must enter a valid email address.';
            }
            elseif ( email_exists($user_email) ) {
                $error = 'Sorry, that email address is already used!';
            }
            // setup new users and send notification
            else
            {
                $user_id = wp_create_user($user_email, $user_pass, $user_email);
                wp_update_user(
                    array(
                        'ID' => $user_id,
                        'nickname' => $user_email
                    )
                );
                $user = new WP_User($user_id);
                $user->set_role('service_provider');

                custom_login( $user_email, $user_pass );
            }
        }
    }
}
add_action('process_sp_registration_form', 'sp_registration_process_hook');

function custom_login($email, $pass) {
    $creds = array();
    $creds['user_login'] = $email;
    $creds['user_password'] = $pass;
    $creds['remember'] = true;
    $user = wp_signon( $creds, false );
    if ( is_wp_error($user) )
        echo $user->get_error_message();
}
// run it before the headers and cookies are sent
add_action( 'after_setup_theme', 'custom_login' );

用户创建得很好,但它不会自动登录用户。当我查看前端时,用户肯定没有在帖子后登录。

你能看到任何明显我做错的事吗?任何帮助将不胜感激。

雅克

2 个答案:

答案 0 :(得分:0)

试试这个,

<?php

function auto_login( $user ) {
$username   = $user;
// log in automatically
if ( !is_user_logged_in() ) {
    $user = get_userdatabylogin( $username );
    $user_id = $user->ID;
    wp_set_current_user( $user_id, $user_login );
    wp_set_auth_cookie( $user_id );
    do_action( 'wp_login', $user_login );
}     
}
?>

答案 1 :(得分:0)

    //get user's ID
    $user = get_user_by('login', $loginusername);
    $user_id = $user->ID;
    //login
    wp_set_current_user($user_id, $loginusername);
    wp_set_auth_cookie($user_id);
    do_action('wp_login', $loginusername);
    //redirect to home page after logging in (i.e. don't show content of www.site.com/?p=1234 )
    wp_redirect( home_url() );