2017-09-08 4 views
2

Pour ces méthodes d'expédition, je voudrais avoir: - "Livraison gratuite" seulement pour la méthode de paiement contre remboursement (COD) (je viens de renommer à l'autre label mais j'utilise la passerelle COD). - "Taux forfaitaire" pour les autres passerelles de paiement (à l'exclusion de la méthode de paiement COD bien sûr).Comment faire une passerelle de paiement spécifique pour être la livraison gratuite sur woocommerce

Ma question: Comment faire une passerelle de paiement spécifique pour qu'elle soit gratuite quand elle est sélectionnée?

Par exemple comme dans cette capture d'écran:

See Screenshot


questions sans réponse similaires: Woocommerce free shipping based on payment gateway selected

+0

Quelque chose est très claire dans votre question que vous commencez à dire que vous voulez « l'option Cash-sur-livraison à la livraison gratuite » et à la fin vous dites au contraire ... S'il vous plaît préciser. Merci. – LoicTheAztec

+0

Désolé pour la confusion, mais pour le rendre plus simple, j'ai trouvé cette question la même que la mienne https://stackoverflow.com/questions/23106558/woocommerce-free-shipping-based-on-payment-gateway-selected –

Répondre

1

WooCommerce exige que la livraison est sélectionnée avant une passerelle, voici comment COD fonctionne parce qu'il vérifie si une méthode d'expédition activée est sélectionnée avant de fournir l'option COD. Donc, si la méthode COD ne fonctionne pas pour vous, alors il n'y a pas d'autre moyen d'accomplir cela parce que vous demandez au processus de paiement de revenir en arrière à partir de la façon dont il a été conçu.

Vous ne pouvez pas modifier l'expédition une fois qu'une passerelle de paiement a été sélectionnée en raison du mode de fonctionnement de WooCommerce. Vous pouvez uniquement ajouter des frais supplémentaires dans le code pour chaque passerelle.


Après un certain temps de penser à ce sujet, je me suis curieux et pensé que j'aurais un jeu pour voir si elle était vraiment impossible. Il se trouve que avec un peu de piratage brut que vous pouvez réellement obtenir ce travail, voici un plugin de base qui accomplira la tâche:

<?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'); 
    } 
} 

Enregistrez le code ci-dessus comme free_shipping_for_bacs.php et installer le plug-in en utilisant la fonction Upload Plugin dans WordPress. Fondamentalement ce que cela fait est de vérifier la session pour voir quelle méthode de paiement a été choisi, puis si la méthode bacs est choisie ajoute un frais qui est moins le total de l'expédition. Cela fonctionne mais comme le panier est mis à jour avec AJAX, vous devez déclencher l'événement update_checkout attaché au corps en JavaScript chaque fois que le mode de paiement change afin de voir la modification reflétée dans le panier ci-dessus. J'ai donc ajouté une boucle qui rajoute le gestionnaire de changement toutes les 500ms à l'événement de bas de page (si votre thème n'implémente pas le hook wp_footer, assurez-vous de l'ajouter), cela peut et devrait être amélioré Si vous décidez d'utiliser ce code, il existe de meilleures méthodes pour vérifier si l'événement de modification doit être rajouté, mais je n'ai pas beaucoup de temps aujourd'hui.

Koda

+1

Dans ce cas je vais modifier ma réponse en conséquence, merci pour l'endroit. – Kodaloid

+0

Si je fais que chaque passerelle de paiement aura la livraison gratuite, je veux seulement la livraison gratuite pour être disponible uniquement pour COD et non pour BAC, chèque, Paypal - ces trois ont des frais d'expédition fixes et j'ai utilisé le plugin WooCommerce Advanced Shipping pour définir leur expédition régir en fonction de la quantité. –

+0

S'il vous plaît vérifier à nouveau ma réponse, je l'ai modifié avec une solution qui devrait fonctionner. – Kodaloid