【问题标题】:Additional paypal fee on Woocommerce checkout pageWoocommerce 结帐页面上的额外贝宝费用
【发布时间】:2018-09-03 16:23:24
【问题描述】:

在 Woocommerce 中,当通过 Paypal 支付网关购买时,我们会尝试为订单添加额外费用。

我们通过这种方式更改了发送到 Paypal 的价格:

add_filter('woocommerce_paypal_args', 'addition_pay');

function addition_pay($paypal_args){
        $new_value=$paypal_args['amount_1']+10;
        $paypal_args['amount_1']=$new_value;
        return $paypal_args;
} 

它可以工作,但问题是在付款过程之后,这笔额外费用不会反映在订单和电子邮件通知中。

这可以通过某种方式解决吗?任何帮助表示赞赏。

【问题讨论】:

    标签: php jquery wordpress paypal woocommerce


    【解决方案1】:

    您最好根据支付网关(此处为您的 Paypal)添加费用,如下所示:

    // Add a fee of 10.00 when Paypal is chosen
    add_action( 'woocommerce_cart_calculate_fees', 'custom_paypal_additional_fee', 20, 1 );
    function custom_paypal_additional_fee( $cart ) {
        if ( is_admin() && ! defined( 'DOING_AJAX' ) )
            return;
    
        if( WC()->session->get( 'chosen_payment_method' ) == 'paypal' )
            $cart->add_fee( __( 'Paypal fee', 'woocommerce' ), 10.00 );
    }
    
    // Add the information on checkout paypal text gateways section
    add_filter('woocommerce_gateway_icon', 'custom_paypal_gateway_text', 20, 2 );
    function custom_paypal_gateway_text( $html, $gateway_id ) {
        if( $gateway_id == 'paypal' )
            $html .= ' <small class="paypal-fee">(+ '.wc_price(10.00).')</small>';
    
        return $html;
    }
    
    // Enable ajax update checkout event when choosing a gateway to refresh the fee
    add_action('wp_footer', 'payment_gateways_update_checkout_event' );
    function payment_gateways_update_checkout_event() {
        ?>
        <script type="text/javascript">
            (function($){
                $('form.checkout').on( 'change', 'input[name^="payment_method"]', function() {
                    var t = { updateTimer: !1,  dirtyInput: !1,
                        reset_update_checkout_timer: function() {
                            clearTimeout(t.updateTimer)
                        },  trigger_update_checkout: function() {
                            t.reset_update_checkout_timer(), t.dirtyInput = !1,
                            $(document.body).trigger("update_checkout")
                        }
                    };
                    $(document.body).trigger('update_checkout')
                });
            })(jQuery);
        </script>
        <?php
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试和工作。

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 2016-08-15
      • 2014-06-30
      • 2016-10-16
      • 1970-01-01
      • 2016-06-15
      • 2014-07-01
      • 2011-12-27
      • 2020-05-11
      相关资源
      最近更新 更多