如何向后退按钮添加新条件(if)?

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

我使用WordPress。我尝试在插件文件中的后退按钮中添加一个新条件(if)。

后退按钮代码位于render.php文件中。该文件代码在这里:

https://gist.github.com/paulvek/b24a632b712414c66474d9e04cdf3800

我认为需要更改这些行:

    $back_url = '';
    if (!$modal) {
        if (isset($_REQUEST['back'])) {
            $back_url = "//" . $_SERVER['HTTP_HOST'];
        } else {
            $back_url = "//" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
            $back_url = remove_query_arg(array('login', 'type'), $back_url);
        }
        $back_title = __('Go Back');
    }

所以我将这些行更改为我在下面编写的代码(但它不起作用):

if (!$modal) {
    if (isset($_REQUEST['back'])) {
        // Check if the user came from the checkout page
        $referer = wp_get_referer();
        $is_from_checkout = strpos($referer, '/checkout/') !== false;

        if ($is_from_checkout) {
            $back_url = "https://example.com/cart";
        } else {
            $back_url = "//" . $_SERVER['HTTP_HOST'];
        }

        $back_title = __('Go Back');
    } else {
        $back_url = "//" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        $back_url = remove_query_arg(array('login', 'type'), $back_url);
        $back_title = __('Go Back');
    }
}

您可以检查这些代码并进行必要的更改吗?

也许这可以帮助你找到答案

此 URL 用于当用户从结帐页面转到登录页面时

https://example.com/checkout/?login=true&page=1&redirect_to=https://example.com/checkout/

当它从这里准备好时我想要它。后退按钮不应将用户重定向到同一页面,而是重定向到卡片页面,否则,将执行与代码中相同的先前条件。这意味着返回到原来的页面。

也许这可以帮助您找到答案。 我使用此功能将用户从结帐页面重定向到登录页面。

//If in basket click on proceed to checkout and if the user is not logged in, redirect him to the login page before checkout, and after login automatically redirect to checkout for next shopping and not back to the basket
add_action('template_redirect', 'check_if_logged_in');
function check_if_logged_in() {
    if ( ! is_user_logged_in() && is_checkout() ) {
        $url = site_url('/checkout/?login=true&page=1&redirect_to=https://example.com/checkout/');
        wp_redirect( $url );
        exit;
    }
}

这就是后退按钮不起作用的原因。出于这个原因,我希望有一个条件,如果它来自结账页面到登录页面,则URL将返回,不是到同一页面,而是到购物车页面。否则,返回同一页面。

我这样写: (现在看来我的努力和这个新代码正在发挥作用!但我确信其中有一些额外的东西!而且它可以被删除并变得更干净和更好。但我不知道该怎么做。

此外,如果我将 example.com 替换为任何其他地址,也没有什么区别!它会返回到与我的网站位于同一域的购物车!如果它来自结账页面。反正。为什么代码看起来工作正常,但是这个地址无论是什么都无效?这很奇怪!)

if (!$modal) {
    $referer = wp_get_referer();
    $is_from_checkout = strpos($referer, '/checkout/') !== false;

    if (isset($_REQUEST['back'])) {
        $back_url = $is_from_checkout ? "https://example.com/cart" : "//" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        $back_url = remove_query_arg(array('login', 'type'), $back_url);
    } else {
        $back_url = $is_from_checkout ? "https://example.com/cart" : $referer;
    }

    $back_title = __('Go Back');
}
php wordpress function plugins customization
1个回答
0
投票

我自己找到了答案!这是我最后的工作代码:

if (!$modal) {
    $referer = wp_get_referer();
    $is_from_checkout = strpos($referer, '/checkout/') !== false;

    if (isset($_REQUEST['back'])) {
        $back_url = $is_from_checkout ? home_url('/cart') : "//" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        $back_url = remove_query_arg(array('login', 'type'), $back_url);
    } else {
        $back_url = $is_from_checkout ? home_url('/cart') : $referer;
    }

    $back_title = __('Go Back');
}

我明白了,寻址时不需要使用域名。什么时候可以使用

home_url

上面的代码替换为下面的代码。这是 render.php 文件中的原始代码

    if (!$modal) {
        if (isset($_REQUEST['back'])) {
            $back_url = "//" . $_SERVER['HTTP_HOST'];
        } else {
            $back_url = "//" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
            $back_url = remove_query_arg(array('login', 'type'), $back_url);
        }
        $back_title = __('Go Back');
    }

刚才我有一个新的请求。 请您检查一下这段代码并告诉我我的方法是否正确以及代码是否干净且足够好?

是否可以在不更改具有该功能的插件文件之一的情况下执行相同的操作?或者是相同的方法(编辑插件文件,我已经完成)来更好地编辑插件文件?

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