Não estamos aceitando novos projetos no momento, saiba mais
O WooCommerce possui várias opções em termos de checkout (finalização de pedido), desde a possibilidade de se finalizar o pedido sem necessidade de uma conta, a realizar o login ou criar uma conta na própria página de checkout.
Uma configuração muito comum que por vezes é deseja por alguns, é a necessidade de criação de conta, porém redirecionando para a página minha conta, e não com o login na própria página de checkout. Uma dificuldade encontrada por alguns usuários é como retornar o usuário de volta a página de checkout após o login nestes cenários, muitas vezes não cobertos pelas respostas de fórum e publicações com snippets. Abaixo veremos um snippet bem simples de como podemos fazer estas duas coisas:
- Redirecionar o usuário não conectado para a página minha conta;
- Redirecionar o usuário que estava partindo para o checkout, após o login, de volta a ele;
/**
* Redirect non logged-in customer to my account and back to checkout page.
*/
function redirect_before_checkout() {
if ( is_user_logged_in() && is_account_page() ) {
if ( isset( $_GET['return-to-checkout'] ) ) {
wp_safe_redirect( get_permalink( get_option( 'woocommerce_checkout_page_id' ) ) );
exit;
}
}
if ( ! is_user_logged_in() && is_checkout() ) {
$url = add_query_arg( 'return-to-checkout', 'true', get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) );
wp_safe_redirect( $url );
exit;
}
}
add_action( 'template_redirect', 'redirect_before_checkout' );
É isso, espero que esta tenha sido uma dica útil para vocês.
Olá. Funcionou perfeitamente, parabéns . Essa opção já deveria ser de praxe do woocommerce!
Obrigado Luis, que bom que foi útil! Pois é, talvez valha a sugestão para o core do WooCommerce, vou ver se não há algo proposto nessa linha já.
Me ajudou bastante, valeu!
Obrigado Ailton, que bom que ajudou!
Estou com um problema que quando clico em concluir compra no carrinho, ele redireciona para a home do site. Gostaria de saber se esse snippet serve exatamente para o que eu quero. Os passos para um usuário não cadastrado fazer uma compra estão agora: carrinho -> Fazer login ou registrar (na página do checkout) -> Minha conta (Após ter feito o cadastro/login). O que eu gostaria: se estiver algum produto no carrinh, o após o registro, o site voltasse para o checkout e não para a página da conta do usuário (minha conta). Consegue me ajudar nessa? Rsrs, não estou conseguindo achar isso em nenhum lugar
Olá Luigi, tudo bem?
Ao clicar em concluir compra, o comportamento padrão do WooCommerce é redirecionar o usuário para a página Finalizar Pedido, permitindo que ele crie sua conta lá, o problema é que o usuário não retorna para a Finalizar Pedido, que é o que este snippet se propõe a resolver. Pela sua descrição, imagino que seja exatamente isso o que precisa, chegou a testar o snippet?
Funcionou perfeitamente, parabéns
Show de bola. Funcionou exatamente como eu precisava.
Muito obrigado!
Olá, em pode me indicar exatamente em ual lugar do código eu insiro essa snippet?
Olá Gabi,
Você pode colocar esse código no
functions.php
do seu tema, em qualquer lugar, se tiver desenvolvendo ele. Senão, uma outra forma é instalar um plugin que te permite inserir e gerenciar snippets, como o Code Snippets: https://br.wordpress.org/plugins/code-snippets/entendi, obrigada!
Parabén, Allyson! Me ajudou bastante. Abs & sucesso.
Oii, tudo bem? Apareceu esse erro no code snippet Cannot redeclare function redirect_before_checkout.
Eu havia tentando e havia dado um erro, mas era por conta de outro snippet, desativei ele e ativei o seu, porém ele volta para a home quando o cliente faz o cadastro… uso o User Registration como plugin de registro.. será que tem relação? (Observação no plugin tem a opção de escolher uma página para redirecionar, deixei em branco e aí nem para a home redireciona)
Muitoooo bom Allyson, Obrigado me salvou !