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

use*_*838 2 wordpress checkout woocommerce

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

我想要的顺序是:

用户结帐 > 检查登录 >

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

这正是基于购物车的 WooCommerce 登录重定向中的情况

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

对这个有什么想法吗?

bha*_*dar 7

尝试一下,无需更改核心代码

  add_action('template_redirect','check_if_logged_in');
    function check_if_logged_in()
    {
        $pageid = get_option( 'woocommerce_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 account url
            );
            wp_redirect($url);
            exit;
        }
        if(is_user_logged_in())
        {
        if(is_page(get_option( 'woocommerce_myaccount_page_id' )))
        {
            
            $redirect = $_GET['redirect_to'];
            if (isset($redirect)) {
            echo '<script>window.location.href = "'.$redirect.'";</script>';
            }
    
        }
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

第二个回答有一个问题,用户登录后总是重定向结帐页面,直到购物车变空它才站在我的帐户页面上!!如果用户未登录,


此代码将用户重定向到我的帐户页面进行登录而不是结帐,然后在登录后它会自动重定向到结帐页面。
步骤 1:
function.php 中添加此代码

add_action('template_redirect','check_if_logged_in');
function check_if_logged_in()
{
    $pageid = get_option( 'woocommerce_checkout_page_id' );// your checkout page id
    if(!is_user_logged_in() && is_page($pageid))
    {
        $url = add_query_arg(
            'redirect_to',
            get_permalink($pageid),
            site_url('/my-account/') // your my acount url
        );
        wp_redirect($url);
        exit;
    }
}
Run Code Online (Sandbox Code Playgroud)

第 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>';
}
?>
Run Code Online (Sandbox Code Playgroud)