4

WooCommerce では、特定の支払いゲートウェイにカスタム手数料を適用する必要があります。私はここからこのコードを持っています: How to Add Handling Fee to WooCommerce Checkout .

これは私のコードです:

add_action( 'woocommerce_cart_calculate_fees','endo_handling_fee' );
function endo_handling_fee() {
    global $woocommerce;

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

        $fee = 5.00;
    $woocommerce->cart->add_fee( 'Handling', $fee, true, 'standard' );
}

この機能は、すべてのトランザクションに手数料を追加します。

この機能を微調整して、特定の支払い方法のみに適用することは可能ですか?

もう1つの問題は、この料金をカートに適用したいということです。出来ますか?

別の方法も歓迎します。同様の「Payment Gateway Based Fees」プラグインについては知っていますが、それを買う余裕はありません。

4

4 に答える 4

23

2021年更新

注:すべての支払い方法は、チェックアウト ページでのみ利用できます。

次のコードは、選択した支払い方法に基づいて、条件付きで特定の手数料を追加します。

// Add a custom fee (fixed or based cart subtotal percentage) by payment
add_action( 'woocommerce_cart_calculate_fees', 'custom_handling_fee' );
function custom_handling_fee ( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    $chosen_payment_id = WC()->session->get('chosen_payment_method');

    if ( empty( $chosen_payment_id ) )
        return;

    $subtotal = $cart->subtotal;

    // SETTINGS: Here set in the array the (payment Id) / (fee cost) pairs
    $targeted_payment_ids = array(
        'cod' => 8, // Fixed fee
        'paypal' => 5 * $subtotal / 100, // Percentage fee
    );

    // Loop through defined payment Ids array
    foreach ( $targeted_payment_ids as $payment_id => $fee_cost ) {
        if ( $chosen_payment_id === $payment_id ) {
            $cart->add_fee( __('Handling fee', 'woocommerce'), $fee_cost, true );
        }
    }
}

支払い方法の変更時にチェックアウトを更新して機能させるには、次のものが必要です。

// jQuery - Update checkout on payment method change
add_action( 'woocommerce_checkout_init', 'payment_methods_refresh_checkout' );
function payment_methods_refresh_checkout() {
    wc_enqueue_js( "jQuery( function($){
        $('form.checkout').on('change', 'input[name=payment_method]', function(){
            $(document.body).trigger('update_checkout');
        });
    });");
}

コードは、アクティブな子テーマ (またはアクティブなテーマ) の functions.php ファイルに入ります。テスト済みで動作します。

WooCommerce チェックアウト ページで特定の支払い方法 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 ファイルに入ります。使用したら、取り外します。

ここに画像の説明を入力


同様の答え:

于 2016-07-14T21:21:45.890 に答える