WooCommerce检查并在结账前重定向登录

问题描述 投票:1回答:4

如果检测到用户未登录,则默认的Woocommerce结帐行为会通过在结帐页面上显示“创建帐户”框来打破许多网络约定。新用户可能不知道该做什么而没有任何添加的说明。

我想要的顺序是:

用户结帐>检查登录>

  • 如果已登录,请继续结帐。
  • 如果未登录,则重定向到登录/注册页面>进入结帐页面。

这完全是在WooCommerce login redirect based on cart的情况

但是,我感到不舒服的是,在上述情况下,一旦用户登录,如果购物车不为空,他/她将被重定向到结账页面。如果用户的购物车不是空的,即使他/她不想结帐,他/她也根本无法去MyAccount。

对这一个有什么想法吗?谢谢大家先进。

wordpress woocommerce checkout
4个回答
1
投票

在第二个答案中有一个问题,在登录用户总是重定向结帐页面后,它不会站在我的帐户页面上,直到购物车变空! 这是DEMO的解决方案。 如果用户未登录,此代码会将用户重定向到我的帐户页面以进行登录而不是结帐,然后在登录后自动重定向到结帐页面。 步骤1: 在function.php中添加此代码

add_action('template_redirect','check_if_logged_in');
function check_if_logged_in()
{
    $pageid = 68; // your checkout page id
    if(!is_user_logged_in() && is_page($pageid))
    {
        $url = add_query_arg(
            'redirect_to',
            get_permalink($pagid),
            site_url('/my-account/') // your my acount url
        );
        wp_redirect($url);
        exit;
    }
}

第2步: 在/wp-content/plugins/woocommerce/templates/myaccount/my-account.php的末尾添加此代码

<?php
$quark_web_solution_redirect = $_GET['redirect_to'];
if (isset($quark_web_solution_redirect)) {
echo '<script>
window.location.href = "'.$quark_web_solution_redirect.'";
</script>';
}
?>

这篇文章来自Quark Web Solution的开发者。 谢谢!!


0
投票

在function.php中添加此代码

add_action('template_redirect','check_if_logged_in');
function check_if_logged_in()
{
    $pageid = 68; // your checkout page id
    if(!is_user_logged_in() && is_page($pageid))
    {
        $url = add_query_arg(
            'redirect_to',
            get_permalink($pagid),
            site_url('/my-account/') // your my acount url
        );
        wp_redirect($url);
        exit;
    }
}

0
投票

在阅读了这篇文章以及Stackoverflow中的其他人之后,我想出了一个简单的解决方案(比起我想的更多)对我有用......也许是我在这个过程中错过的东西,但我测试了几个组合和这个对我有用。所以我们想:

  1. 客户去结账
  2. 如果已登录,请继续结帐。如果未登录,请转到包含登录和注册表单的页面。
  3. 进入此页面后,如果客户登录或注册,请继续结帐。

首先,我使用[woocommerce_my_account]短代码创建了一个自定义页面。在这里我定制了文本等...在表单中,所以它与我的帐户页面有点不同。此页面的URL路径是 - > / iniciar-sesion-registrarse。

然后,我将此代码放在我的子主题的functions.php中:

function custom_woocommerce_login_redirect_to_checkout_page() {

  // Caso 1: Usuario no identificado intenta acceder a Finalizar Compra
    if ( !is_user_logged_in() && is_checkout() )
        wp_redirect( get_permalink( get_page_by_path('iniciar-sesion-registrarse') ) );

  // Caso 2: Si en la página de identificarse, el cliente ha accedido o se ha registrado, o tiene el carrito vacío, continuar a Finalizar Compra.
  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消息:你不能在你的购物车中没有商品的结帐)。

这样,在此自定义页面中登录或注册时,错误消息将正常显示,就像它是真正的“我的帐户”页面一样,但一旦登录,它将重定向到结帐。

我希望有人可以告诉我,如果我在这个过程中遗漏了什么。谢谢


0
投票

实际上今天有这个问题,现在有一个解决方案。

上下文:我们的网站有一个单独的用户注册系统,而不是WooCommerce,因此我们不希望重复的过程提示用户注册两次。

首先,我将给出简要的解决方案,然后列出我的情况的完整步骤。

简要解决方案:启用访客结账,(相信我)在结账时启用帐户创建,自动生成用户名和密码(最重要)。然后在电子邮件设置中禁用“新帐户”消息。现在“用户”可以通过自动生成的帐户详细信息结帐,但他们从来不知道它并且该信息基本上被转储。

我的帐户和隐私设置的屏幕截图。请注意我还禁用了WC的电子邮件设置中触发的“新帐户”消息。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.