在我的主题Woocommerce的不同页面上登录重定向

时间:2016-05-13 02:21:12

标签: php wordpress woocommerce

我正在开发自己的主题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;
   }
}

如果有人能帮助我,我将非常感激。

3 个答案:

答案 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中的其他文章,我提出了一个简单的解决方案(比起初我想的更多)对我有用......也许是我在这个过程中错过的东西,但我已经测试过了几种组合,它适用于我。所以我们想:

  1. 客户去结账
  2. 如果已登录,请继续结帐。如果未登录,请转到页面 登录和注册表格。
  3. 进入此页面后,如果客户登录或注册,请继续 结帐。
  4. 首先,我使用[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;
}