我正在开发自己的主题Woocommerce,现在我需要在登录我使用Woocommerce登录表单的特定页面后进行重定向。 为此我在functions.php中添加了以下函数
if (!is_account_page()) {
add_filter('woocommerce_login_redirect', 'redirect_after_login_cart');
function redirect_after_login_cart(){
wp_redirect( get_permalink( get_page_by_path(‘checkout’) ) );
exit;
}
}
我只想登录购物车页面,登录结帐页面后进行重定向。 my-account的表单仍然会重定向到my-account页面。就这样,我所有的Woocommerce登录表单都会重定向到结帐页面。 条件没有得到尊重。
在进入结帐页面之前,我会检查您是否已登录。如果您已登录,请重定向到结帐,但重定向到使用登录表单创建的页面。登录该页面时,不会转到我的帐户页面,而是重定向到结帐。
每次登录时都会默认使用Woocommerce,转到我的帐户,只有当您在页面上创建登录购物车时我才会更改此表单
add_action('template_redirect','check_if_logged_in');
function check_if_logged_in(){
if(!is_user_logged_in() && is_checkout()){
wp_redirect( get_permalink( get_page_by_path('login-cart') ) );
exit;
}
}
如果有人能帮助我,我将非常感激。
答案 0 :(得分:2)
我设法解决了我的问题。请遵循以下代码:
add_action( 'woocommerce_login_form', 'redirect_user_to_checkout' );
function redirect_user_to_checkout() {
$referer = get_permalink( get_page_by_path('finalizar-compra'));
if( $referer ) {
if(!is_account_page()) { ?>
<input type="hidden" name="redirect-user" value="<?php echo $referer; ?>"><?php
}
}
}
function custom_woocommerce_login_redirect_to_checkout_page( $redirect, $user ) {
if( isset( $_POST['redirect-user'] ) ) {
$redirect = esc_url( $_POST['redirect-user'] );
}
return $redirect;
}
add_filter( 'woocommerce_login_redirect', 'custom_woocommerce_login_redirect_to_checkout_page' );
答案 1 :(得分:2)
根据这篇文章以及Stackoverflow中的其他文章,我提出了一个简单的解决方案(比起初我想的更多)对我有用......也许是我在这个过程中错过的东西,但我已经测试过了几种组合,它适用于我。所以我们想:
首先,我使用[woocommerce_my_account]短代码创建了一个自定义页面(所以现在我有两个不同的页面,包含此短代码,“我的帐户”页面和此自定义页面)。在这里我定制了文本等...在表单中,所以它与我的帐户页面有点不同。此网页的网址路径为 - &gt; / iniciar-使sesion-registrarse。
然后,我把这段代码放在我孩子主题的functions.php中:
function custom_woocommerce_login_redirect_to_checkout_page() {
// Caso 1: user not logged in and try to go to checkout
if ( !is_user_logged_in() && is_checkout() )
wp_redirect( get_permalink( get_page_by_path('iniciar-sesion-registrarse') ) );
// Caso 2: if user login or register in my custom login page, or has empty cart, i redirect back to checkout.
if ( is_page('iniciar-sesion-registrarse') ) {
if( is_user_logged_in() || WC()->cart->is_empty() ) {
wp_redirect( get_permalink( get_page_by_path('finalizar-comprar') ) );
}
}
}
add_action( 'template_redirect', 'custom_woocommerce_login_redirect_to_checkout_page' );
所以在案例1中:如果用户没有登录并尝试去结账,它会重定向到我的自定义登录页面'iniciar-sesion-registrarse'。
然后在案例2中:如果用户登录或在此页面注册,那么我重定向登录并在此页面中的用户结帐(如果我不将其重定向到此自定义登录页面上的结帐,我的帐户页面应该是显示在此页面中)。
如果有人直接访问此自定义页面(不尝试结帐),我也会将其重定向到结帐状态,并且在购物车中没有任何内容(因此,我们会显示一些woocommerce消息:您无法在没有购买商品的情况下结帐)。
这样,当登录或注册此自定义页面时,错误消息(电子邮件不正确,电子邮件不存在等等)将正常显示,就好像它是真正的“我的帐户”页面,但一次登录此自定义页面后,它将重定向到结帐(而不是显示我的帐户页面)。
我希望有人可以告诉我,如果我在这个过程中遗漏了什么。 THX
编辑:如果您正在使用caché插件,请不要忘记永远不要使用此自定义登录页面
答案 2 :(得分:0)
我不确定为什么使用条件你可以尝试这个
add_filter( 'woocommerce_login_redirect', 'redirect_after_login_cart' );
function redirect_after_login_cart( $default_redirect ){
if( function_exists('wc_get_checkout_url') )
$redirect_url = wc_get_checkout_url();
else
$redirect_url = get_permalink( get_page_by_path(‘checkout’) ) ;
return $redirect_url;
}