首页 > 解决方案 > 使用 sprintf 为 WooCommerce 支付方式费用显示不同的文本标签

问题描述

这是基于根据用户角色向 WooCommerce 支付方式分配百分比费用。我想扩展它以在 sprintf 函数中的“卡费”标签之前显示另一个自定义描述。我想显示 $description 然后是“卡费”然后是(百分比费用)。

add_action('woocommerce_cart_calculate_fees', 'sm_credit_card_fee_role_gateway' );
function sm_credit_card_fee_role_gateway( $cart ){
    if ( is_admin() && !defined('DOING_AJAX') )
        return;

    // Only on checkout page and logged in users
    if ( ! ( is_checkout() && ! is_wc_endpoint_url() ) || ! is_user_logged_in() )
        return;

    $wpuser_object = wp_get_current_user();
    $allowed_roles = array('administrator', 'default_wholesaler', 'wholesaler-non-vat-registered', 'shop_manager');

    if ( array_intersect($allowed_roles, $wpuser_object->roles) ){
        $payment_method = WC()->session->get('chosen_payment_method');

        if ( 'cardgatecreditcard' === $payment_method ){
            $percentage = 8.25;
            $description = 'Credit';
        }
        elseif ( 'cardgatesofortbanking' === $payment_method ){
            $percentage = 6;
            $description = 'SofortBanking';
        }
        elseif ( 'cardgategiropay' === $payment_method ){
            $percentage = 3.15;
            $description = 'GiroPay';
        }
        elseif ( 'cardgateideal' === $payment_method ){
            $percentage = 2.1;
            $description = 'iDeal';
        }
    }
    if ( isset($percentage) ) {
        $surcharge = ($cart->cart_contents_total + $cart->shipping_total) * $percentage / 100;
        $cart->add_fee( sprintf( __(' $description Card Fee (%s)', 'woocommerce'), $percentage . '%' ), $surcharge, true );
    }
}

标签: phpwordpresswoocommerceprintfcart

解决方案


只需替换以下代码行:

$cart->add_fee( sprintf( __(' $description Card Fee (%s)', 'woocommerce'), $percentage . '%' ), $surcharge, true );

和:

$cart->add_fee( sprintf( __('%s Card Fee (%s)', 'woocommerce'), $description, $percentage . '%' ), $surcharge, true );

测试和工作


推荐阅读