WooCommerce : Désactiver un moyen de paiement selon la méthode d'expédition

WooCommerce : Désactiver un moyen de paiement selon la méthode d'expédition

Tech web
Cloche d'abonnement aux notifications | |
  • Recevoir les notifications

WooCommerce est une valeur sûre dans le milieu du commerce en ligne. Ajouter un moyen de paiement ou une zone d'expédition est relativement élémentaire. En revanche, si vous désirez limiter les moyens de paiement en fonction d'un mode d'expédition par contre, il va falloir coder un petit peu. Mais pas de panique, voici la solution toute faite pour vous !

Cette méthode a été testée sur WooCommerce 3.5.5

Pour commencer, imaginons que vous ayez implémenté 2 modes d'expédition, à savoir :

  • Retrait de la marchandise en magasin
  • Forfait de livraison à CHF 10.-

et 3 moyens de paiement :

  • Paiement au point de vente
  • Virement bancaire
  • Stripe (carte de crédit)

Ouvrez une page de votre site où ces informations sont affichées (donc dans l'une des pages du processus de commande).

3 moyens de paiement

Pour l'exercice, je vous propose de supprimer le paiement par carte de crédit pour les utilisateurs qui optent pour le retrait de la marchandise en magasin.

Nous allons commencer par créer un "hook" pour la fonction woocommerce_available_payment_gateways dans le fichier functions.php (tout à la fin, juste avant le "?>") et afficher les moyens de paiement disponibles avec la fonction print_r(), comme ceci :

add_filter( 'woocommerce_available_payment_gateways', 'gateway_disable_shipping' );

function gateway_disable_shipping( $available_gateways ) {
    print_r($available_gateways);  
}

Rafraichissons alors notre page et observons le code source (généralement ctrl + U sur windows, clique droite et "Afficher le code source de la page" sinon).

Vous devriez trouver sur votre page un tableau semblable à celui-ci :

Array
(
    [cod] => WC_Gateway_COD Object
        (
            [order_button_text] => 
            [enabled] => yes
            [title] => Paiement lors du retrait de la marchandise au Domaine
            [description] => Le paiement s'effectue lors du retrait de la marchandise à la cave du Domaine.
            [chosen] => 
            [method_title] => Paiement à la livraison
            [method_description] => Demandez à vos clients de payer en espèces (ou par tout autre moyen) à la livraison.
            [has_fields] => 
            [countries] => 
            [availability] => 
            [icon] => 
            [supports] => Array
                (
                    [0] => products
                )

Comme vous le voyez, ce n'est qu'un morceau du tableau. Mais ce qui nous intéresse ici ce trouve au début : [cod]. Il s'agit de la méthode de paiement, et plus précisément du paiement au point de vente. Plus bas, vous trouverez aussi [stripe] et [bacs] pour la carte de crédit et le paiement par virement bancaire (et d'autres encore, bien sûr, si vous avez ajouté des moyens de paiement supplémentaires).

Pour l'exemple, nous souhaitons supprimer le paiement par carte de crédit ([stripe]). Revenez dans votre page functions.php. Enlevez ou commentez le print_r($available_gateways), puis ajoutez tout le code que vous verrez ci-dessous :

// désactiver une méthode de paiement pour un mode d'expédition spécifique
add_filter( 'woocommerce_available_payment_gateways', 'gateway_disable_shipping' );
 
function gateway_disable_shipping( $available_gateways ) {

    global $woocommerce;
     
    if ( !is_admin() ) {
         
        $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
         
        $chosen_shipping = $chosen_methods[0];
         
        if ( isset( $available_gateways['stripe'] ) && 0 === strpos( $chosen_shipping, 'local_pickup' ) ) {
          unset( $available_gateways['stripe'] );
	}			
    }
     
    return $available_gateways;

}

Comme vous pouvez le voir, nous vérifions d'abord que l'utilisateur n'est pas administrateur, puis nous obtenons les modes d'expéditions (que vous pouvez aussi afficher avec print_r() si ce n'est pas le premier mode que vous souhaitez traiter).

En l'occurrence, notre premier mode (donc la case 0 du le tableau) est bien le "retrait de la marchandise en magasin". On vérifie avec un ultime test que c'est bien le "retrait de la marchandise en magasin" qui a été sélectionné, et, si c'est le cas, on retire "stripe" des moyens de paiements. Enfin, on retourne le tableau des moyens de paiement disponibles.

Rafraichissez alors votre page. Vous devriez obtenir le résultat escompté !

suppression d'un moyen de paiement

 

 

Catégories :
Tech web

Tags :
PHP Wordpress WooCommerce

Vous avez aimé cet article ? Suivez-nous sur Facebook pour ne rien manquer !