我正在尝试创建自定义用户,然后以编程方式记录它们,之后我想将它们重定向到付款页面。
我在主题的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' );
用户创建得很好,但它不会自动登录用户。当我查看前端时,用户肯定没有在帖子后登录。
你能看到任何明显我做错的事吗?任何帮助将不胜感激。
雅克
答案 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() );