【问题标题】:Reset previous chosen shipping method in Woocommerce checkout page在 Woocommerce 结帐页面中重置以前选择的运输方式
【发布时间】:2019-03-21 00:41:06
【问题描述】:

目前,我正在使用此过滤器清除默认的运输选择方法:

add_filter( 'woocommerce_shipping_chosen_method', '__return_false', 99);

但是,这只会在客户的初始会话期间清除它。一旦客户选择了一次选项,它就会记住未来的选择。

我正在尝试让结帐功能强制客户在每次访问结帐时都选择送货选项,即使是在同一会话中也是如此。是否可以在每次加载结帐页面时运行此过滤器?

【问题讨论】:

    标签: php wordpress woocommerce checkout shipping-method


    【解决方案1】:

    您可以在结帐页面中重置上次选择的送货方式(对于已登录的客户):

     delete_user_meta( get_current_user_id(), 'shipping_method' );
    

    并且还从会话数据中删除选择的运输方式:

    WC()->session->__unset( 'chosen_shipping_methods' );
    

    在类似的钩子函数中:

    add_action( 'template_redirect', 'reset_previous_chosen_shipping_method' );
    function reset_previous_chosen_shipping_method() {
        if( is_checkout() && ! is_wc_endpoint_url() && is_user_logged_in() 
        && get_user_meta( get_current_user_id(), 'shipping_method', true ) ) {
            delete_user_meta( get_current_user_id(), 'shipping_method' );
            WC()->session->__unset( 'chosen_shipping_methods' );
        }
    }
    

    或者您也可以在结帐页面为每个人设置默认送货方式:

    add_action( 'template_redirect', 'reset_previous_chosen_shipping_method' );
    function reset_previous_chosen_shipping_method() {
        if( is_checkout() && ! is_wc_endpoint_url() && is_user_logged_in() ) {
            WC()->session->set( 'chosen_shipping_methods', array('flat_rate:14') );
        }
    }
    

    要找出要使用的运输方式费率 ID,您可以使用浏览器检查器检查购物车或结帐页面中的运输方式单选按钮,例如:

    代码在您的活动子主题(或活动主题)的 function.php 文件中。它应该可以工作。

    【讨论】:

    • 嗨 Loic,感谢您的回复。我刚刚尝试插入钩子,但它没有改变任何东西。我以用户(管理员)身份登录。我正在处理的网站是这样的:bossairsuspension.co.nz/checkout
    • @DonovanRucastle,对我来说它有效……我已经用第二种选择更新了我的答案。试试看。
    • 非常感谢您一直以来的帮助!您的第二段代码有效,但我试图将其设置为在页面加载时不选择运输方式。我目前在网站上运行您的第一段代码,但它不会在页面重新加载时取消选择运输选项。每当有人重新加载页面时,有没有办法清除结帐页面上的所有详细信息?几乎就像不缓存整个结帐页面而不仅仅是运输方式。
    • 没问题,感谢您迄今为止的帮助!它在清空购物车时会正确清除所选选项,而不仅仅是在页面刷新时。我认为这是一个很好的起点!
    • 我正在使用您的解决方案并且效果很好。我在 ajax 结帐时遇到的问题是,我在运输方法上使用“需要验证”类属性,并且没有更新为“woocommerce-invalid woocommerce-invalid-required-field”。这是一个 woo 错误还是由于不支持我们必须手动处理它?
    【解决方案2】:

    找到了这个解决方案,它可能有点老套。 只需取消设置当前选择的送货方式,然后在验证结帐时检查它是否存在。

    add_action(
        'woocommerce_before_checkout_form',
        'reset_previous_chosen_shipping_method'
    );
    function reset_previous_chosen_shipping_method()
    {
        if (is_checkout() && !is_wc_endpoint_url()) {
            unset(WC()->session->chosen_shipping_methods);
        }
    }
    
    add_action('woocommerce_after_checkout_validation', 'validate', 10, 2);
    function validate($data, $errors)
    {
        if (!$data['shipping_method']) {
            $errors->add('validation', __('Please select shipping method'));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 2021-09-16
      • 2019-05-04
      • 2018-02-05
      • 2022-08-24
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多