Перенаправить, если $ _Server – /wp-login.php?checkemail=registered

Этот вопрос задает вопрос о перенаправлении на пользовательский URL-адрес при неудачной регистрации? :

В своем комментарии Хэ Шиминг отметил.

что для перенаправления пользователя при успешной регистрации нужно login_head для login_head и проверить, является ли $_SERVER['REQUEST_URI'] /wp-login.php?checkemail=registered и перенаправляется на правильный. Вероятно, есть фильтр с именем registration_redirect , но он не работает

Я пытаюсь перевести это в код, вот что я получил:

 function redirect_after_success() { if ($_SERVER['REQUEST_URI']=='/wp-login.php?checkemail=registered'){ $redirect_url = get_bloginfo('url') . '/register'; wp_redirect( $redirect_url ); exit; } } add_action('login_head','redirect_after_success'); 

Эта функция не кажется правильной. Я по-прежнему перенаправляюсь на http://../register/?login=failed даже после успешной регистрации.

Вот другие функции, которые обрабатывают неполные / недействительные регистрации:

  // hook failed login add_action('wp_login_failed', 'my_frontend_login_fail'); function my_frontend_login_fail($username){ // Get the reffering page, where did the post submission come from? $referrer = add_query_arg('login', false, $_SERVER['HTTP_REFERER']); // if there's a valid referrer, and it's not the default log-in screen if(!empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin')){ // let's append some information (login=failed) to the URL for the theme to use wp_redirect($referrer . '?login=failed'); exit; } } //hook empty login submit add_action( 'login_head', 'my_frontend_login_no_pass_no_username' ); function my_frontend_login_no_pass_no_username(){ $referrer = add_query_arg('login', false, $_SERVER['HTTP_REFERER']); if ( (!isset($_REQUEST['user_login']) || ( isset( $_REQUEST['user_login'] ) && trim( $_REQUEST['user_login'] ) == '' ) ) || (!isset($_REQUEST['user_pass']) || ( isset( $_REQUEST['user_pass'] ) && trim( $_REQUEST['user_pass'] ) == '' ) ) ){ wp_redirect( add_query_arg('login', 'failed', $referrer) ); exit; } } // unsuccessfull registration add_action('register_post', 'binda_register_fail_redirect', 99, 3); function binda_register_fail_redirect( $sanitized_user_login, $user_email, $errors ){ //this line is copied from register_new_user function of wp-login.php $errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email ); //this if check is copied from register_new_user function of wp-login.php if ( $errors->get_error_code() ){ //setup your custom URL for redirection $redirect_url = get_bloginfo('url') . '/register'; //add error codes to custom redirection URL one by one foreach ( $errors->errors as $e => $m ){ $redirect_url = add_query_arg( $e, '1', $redirect_url ); } //add finally, redirect to your custom page with all errors in attributes wp_redirect( $redirect_url ); exit; } } 

http://codex.wordpress.org/Plugin_API/Action_Reference/user_register

В вопросе, на который вы ссылаетесь, используется крюк «register_post», который находится непосредственно перед входом пользователя в базу данных. Если регистрация прошла успешно, то есть, когда это звучит так, как будто вы хотите перенаправить. Таким образом, используйте hook, который запускается сразу после ввода пользователя в базу данных.

TL; DR Используйте «user_register» вместо «login_head»,

Вы пытались использовать действие template_redirect ? Я всегда использую его, когда нет никаких других действий, которые я могу подключить.

 add_action( 'template_redirect', 'wpse138854_register_redirect' ); function wpse138854_register_redirect() { if ( isset( $_GET['checkemail'] ) && 'registered' == $_GET['checkmail'] ) { wp_redirect( get_bloginfo('url') . '/register' ); } }