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

Add a fee based on chosen payment gateways and user roles

我用的是回答码,按用户角色加费用ok,但客户确认付款后,不收取费用。在我的例子中,支付网关是 MercadoPago,在我的国家类似于“Paypal”。

事实是费用被忽略了。有什么想法吗?

也许您需要找出为 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;
}

代码进入您的活动 child 主题(或活动主题)的 functions.php 文件。

Once you found the related payment method id(s) you are looking for, remove this code.


我已经重新访问了Check WooCommerce User Role and Payment Gateway and if they match - Apply fee答案代码,处理多个付款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;
}

代码进入活动 child 主题(或活动主题)的 functions.php 文件。已测试并有效。

Apparently Mercado pago payment plugin doesn't accept Fees.

类似:Add fee based on specific payment methods in WooCommerce