【问题标题】:Woocommerce trigger the "order review" update in checkout pageWoocommerce 在结帐页面触发“订单审核”更新
【发布时间】:2019-12-11 22:44:48
【问题描述】:

我使用 Jeroen Sormani 的 Woocommerce Advanced Shipping plugin 作为送货方式,使用 Karolína Vyskočilová 的 WooCommerce Pay for Payment plugin 为“货到付款”付款方式添加 5 欧元的固定费用。

使用 Advanced Shipping 插件,我还创建了一个名为“本地取货”的通用规则,以便始终对客户可见。然后我需要隐藏“当地提货”运输选项时隐藏“现金交货”付款方式。为此,我必须在我的 functions.php 文件中添加一些代码,以便在高级运输规则中识别特定的本地取货规则:

function my_custom_available_payment_gateways( $gateways ) {
    $chosen_shipping_rates = WC()->session->get( 'chosen_shipping_methods' );
    // When 'local pickup' (rule id 21828) has been chosen as shipping rate
    if ( in_array( '21828', $chosen_shipping_rates ) ) :
        // Unset 'cash on delivery'
        unset( $gateways['cod'] );
    endif;
return $gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'my_custom_available_payment_gateways' );

这是我的问题:在结帐页面中,当我切换到“本地取货”时,“货到付款”选项如前所述消失了,但订单审核表中的 5 欧元费用仍然存在。我必须再次手动切换付款方式(即从银行转帐到信用卡)才能使费用消失。

我需要找到一些解决方案,以在选择本地取货时触发订单审核更新/刷新。

我尝试在结帐页面中插入以下脚本,但没有成功

function woocommerce_add_update_cart() {
    // Only on checkout page
    if( ! is_checkout() ) return;
    ?>
    <script type="text/javascript">
    jQuery(document.body).trigger("update_checkout");
    </script>
    <?php
}
add_action( 'wp_footer', 'woocommerce_add_update_cart' );

【问题讨论】:

    标签: javascript php ajax wordpress woocommerce


    【解决方案1】:

    可以添加如下代码sn -p -

    function refresh_checkout_on_payment_methods_change(){
        ?>
        <script type="text/javascript">
            (function($){
                $( 'form.checkout' ).on( 'change', 'input[name^="shipping_method"]', function() { 
                    $('body').trigger('update_checkout');
                });
            })(jQuery);
        </script>
        <?php
    }
    
    add_action( 'woocommerce_review_order_before_payment', 'refresh_checkout_on_payment_methods_change' );
    

    【讨论】:

    • 感谢您的帮助。请查看我的答案以获得我想出的解决方案。
    【解决方案2】:

    我设法解决了我的问题。 itzmekhokan 建议的 $('body').trigger('update_checkout'); 功能无法从更新的订单审核中删除额外费用。我必须模拟点击其中一种付款方式单选按钮来触发结帐更新。

    对于结帐页面:

    function woocommerce_add_update_checkout() {
        // Only on checkout page
        if( ! is_checkout() ) return;
        ?>
        <script type="text/javascript">
        (function($){
            $('form.checkout').on( 'change', 'input[name^="shipping_method"]', function() {
            document.getElementById("payment_method_bacs").checked = true;
            });
        })(jQuery);
        </script>
        <?php
    }
    add_action( 'wp_footer', 'woocommerce_add_update_checkout' );
    

    对于购物车页面摘要:

    function reset_payment_method() {
        // Only on cart page
        if( ! is_cart() ) return;
        $payment_method = WC()->session->get( 'chosen_payment_method' );
        if ( $payment_method = 'cod' ) :
            WC()->session->set( 'chosen_payment_method', 'bacs' );
        endif;
    }
    add_filter( 'woocommerce_before_shipping_calculator', 'reset_payment_method' );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-27
      • 2021-11-16
      • 2021-05-07
      • 2023-03-21
      • 2019-01-21
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多