2017-09-08 69 views
2

對於那些運輸方式,我想有: - 「免費送貨」僅適用於貨到付款(COD)付款方式(我剛更名爲它到其他標籤,但我正在使用COD網關)。 - 其他支付網關的「統一費率」(當然不包括COD支付方式)如何使特定支付網關免費送貨woocommerce

我的問題:如何選擇特定支付網關時免費送貨?

例如像在這個截圖:

See Screenshot


類似的懸而未決的問題:Woocommerce free shipping based on payment gateway selected

+0

東西是你的問題非常不清楚。謝謝。 – LoicTheAztec

+0

不好意思,但爲了簡單起見,我發現這個問題與我的一樣https://stackoverflow.com/questions/23106558/woocommerce-free-shipping-based-on-payment-gateway-selected –

回答

1

WooCommerce要求航運網關之前選擇,這是COD是如何工作的,因爲它檢查如果在提供COD作爲選項之前選擇啓用的送貨方式。所以如果COD方法不適用於你,那麼沒有其他辦法可以實現這一點,因爲你要求結賬過程從它的設計方式向後工作。

由於WooCommerce的工作方式,一旦選擇了支付網關,您就無法修改送貨。您只能在每個網關的代碼中添加額外費用。


一段時間考慮這個問題後,我得到了好奇,我想我不得不一齣戲,看它是否是忠實地是不可能的。事實證明,有一點粗的黑客其實你可以得到這個工作,這裏是一個基本的插件,能完成這個任務:

<?php 
/** 
* Plugin Name: Free Shipping For BACS 
* Description: Makes shipping for BACS free. 
* Version: 0.0.1 
* Author: Kodaloid 
* Requires at least: 4.4 
* Tested up to: 4.8 
*/ 

if (!defined('ABSPATH')) exit; 

add_action('init', 'fg_init'); 

function fg_init() { 
    add_action('woocommerce_cart_calculate_fees', 'fg_add_fee'); 
    add_action('wp_footer', 'fg_footer', 9999); 
} 

function fg_footer() { 
    ?> 
    <script type="text/javascript"> 
    jQuery(function($) { 
     setInterval(function() { 

     $(".input-radio[name='payment_method']").off().change(function() { 
     console.log('triggered'); 
      jQuery('body').trigger('update_checkout'); 
     }); 

     }, 500); 
    }); 
    </script> 
    <?php 
} 

function fg_add_fee($the_cart) { 
    global $woocommerce; 
    if ($woocommerce->session->chosen_payment_method == 'bacs') { 
    $woocommerce->cart->add_fee('Free Shipping For BACS', -($the_cart->shipping_total), true, 'standard'); 
    } 
} 

保存上面的代碼爲free_shipping_for_bacs.php和安裝插件使用WordPress中的上傳插件功能。

基本上這是檢查會話以查看哪個付款方式已被選中,然後如果選擇bacs方法增加一個費用,減去運費的總和。這是有效的,但是因爲購物車使用AJAX進行更新,每次付款方式發生變化時,您都需要觸發JavaScript中附加到主體的update_checkout事件,以便查看上述購物車中反映的更改。

因此,我添加了一個循環,每500ms重新添加更改處理程序到頁腳事件(如果您的主題沒有實現wp_footer鉤子,請確保添加它),這可以並應該改進如果您決定使用此代碼,因爲有更好的方法來檢查更改事件是否需要重新添加,這只是我今天沒有太多時間。當你開始說你要「現金上傳遞選項設置爲免費送貨」,並在年底你說的恰恰相反......請澄清

幸田來未

+1

在那我會相應地修改我的答案,謝謝你的提問。 – Kodaloid

+0

如果我這樣做,每個支付網關都將免費送貨,我只希望免費送貨僅適用於COD,而不適用於BAC,支票,Paypal - 這三種具有固定運費,我使用WooCommerce Advanced Shipping插件來設置其運費基於數量的規則。 –

+0

請再次檢查我的答案,我修改了它應該工作的解決方案。 – Kodaloid