为了账号安全,请及时绑定邮箱和手机立即绑定

根据所选的支付网关和用户角色添加费用

根据所选的支付网关和用户角色添加费用

PHP
守着星空守着你 2023-09-22 14:58:37
我正在使用检查 WooCommerce 用户角色和支付网关,如果它们匹配 - 应用费用答案代码,并且根据用户角色添加费用,但是当客户确认付款时,不收取费用。就我而言,支付网关是 MercadoPago,在我的国家,其功能类似于“Paypal”。事实是费用被忽略了。任何想法?
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

也许您需要的是找出 Mercado pago 启用的付款方式 ID。


以下代码将在结帐页面上向管理员显示结帐可用付款方式上付款方式标题附近的付款 ID:


add_filter( 'woocommerce_gateway_title', 'display_payment_method_id_for_admins_on_checkout', 100, 2 );

function display_payment_method_id_for_admins_on_checkout( $title, $payment_id ){

    if( is_checkout() && ( current_user_can( 'administrator') || current_user_can( 'shop_manager') ) ) {

        $title .= ' <code style="border:solid 1px #ccc;padding:2px 5px;color:red;">' . $payment_id . '</code>';

    }

    return $title;

}

代码位于活动子主题(或活动主题)的functions.php 文件中。

https://img3.sycdn.imooc.com/650d3b500001576005090278.jpg

找到您要查找的相关付款方式 ID 后,请删除此代码。


我重新访问了检查 WooCommerce 用户角色和支付网关,如果它们匹配 - 应用费用答案代码,处理多个支付 ID

add_action( 'woocommerce_cart_calculate_fees', 'add_custom_fee' );

function add_custom_fee( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )

        return;


    if ( ! is_user_logged_in() )

        return;


    ## SETTINGS:

    $user_roles  = array( 'vendor', 'administrator' ); // Defined  user roles

    // Targeted payment method Ids

    $payment_ids = array('cod', 'paypal'); 

    $percentage  = 5; // Fee percentage


    $user           = wp_get_current_user();  // Get current WP_User Object

    $chosen_payment = WC()->session->get('chosen_payment_method'); // Choosen payment method

    $cart_subtotal  = $cart->subtotal; // Including taxes - to exclude taxes use $cart->get_subtotal()


    // For matched payment Ids and user roles

    if ( in_array( $chosen_payment, $payment_ids ) && array_intersect( $user->roles, $user_roles ) ) { 

        $fee_cost = $percentage * $cart_subtotal / 100;  // Calculation

        $cart->add_fee( __('Payment Fee'), $fee_cost, true ); // Add fee (incl taxes)

    }

}

现在缺少一些内容:以下内容将刷新付款方式选择的结帐:


// jQuery - Update checkout on payment method change

add_action( 'wp_footer', 'custom_checkout_jquery_script' );

function custom_checkout_jquery_script() {

    if ( is_checkout() && ! is_wc_endpoint_url() ) :

    ?>

    <script type="text/javascript">

    jQuery( function($){

        $('form.checkout').on('change', 'input[name="payment_method"]', function(){

            $(document.body).trigger('update_checkout');

        });

    });

    </script>

    <?php

    endif;

}

代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。

显然 Mercado pago 支付插件不接受费用。


查看完整回答
反对 回复 2023-09-22
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信