Redirecionar para URL personalizado quando o registro falha?

3

Quando eu quero redirecionar o usuário após o registro bem-sucedido, eu uso apenas o gancho de filtro "registration_redirect". Como sobre quando o registro falha, qual gancho de filtro devo usar? Eu olhei para o wp-login.php mas não vi nenhum filtro / gancho de ação que eu pudesse usar. Como eu faço isso?

    
por jilseego 02.07.2011 / 11:04

2 respostas

1

Você pode adicionar um redirecionamento htaccess ou experimentar o tema meu plugin de login: enlace . Tem opções para redirecionamento personalizado.

    
por Innate 13.07.2012 / 23:50
8

Existe uma solução mais sofisticada em vez de htaccess ou plugin. Para os interessados neste tópico, há o meu código para redirecionar após (exatamente antes) tentativa de resgate sem sucesso.

Por que antes? Antes de uma tentativa de registro, o WordPress verifica um nome de usuário e endereço de e-mail, se eles não estão vazios, se eles já não estão no banco de dados, e se o email ou o nome de usuário estão corretos. Em caso afirmativo, ele reporta erros e você pode ligar a uma função logo após essa verificação.

do_action( 'register_post', $sanitized_user_login, $user_email, $errors );

Próximo passo - não aproveitável - é uma tentativa de criar um novo usuário. Se isso falhar, há uma outra mensagem de erro e você será redirecionado para a tela padrão do wp_login.php.

Mas existe um mas. Este processo, Next step, apenas chama wp_insert_user () e esta função falha apenas em empty_user_login, existing_user_login e existing_user_email - caso contrário, termina com sucesso. E se você leu cuidadosamente, todas essas variáveis são verificadas antes que essa função seja chamada (essa verificação dupla é lógica, pois você pode chamar o wp_insert_user diretamente do seu plugin).

Portanto, se o processo de registro falhar após o gancho mencionado, ele falhará porque há algo errado com sua instalação do WordPress e, portanto, não é uma falha de sua função de redirecionamento conectada ao processo de registro.

E, finalmente, algum código para aqueles que desejam copiar e colar um código para redirecionamento para a página personalizada após o login falhar:

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') . '/registrace';
        //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;   
    }
}
    
por david.binda 04.02.2013 / 14:02