Voici un exemple avec une fonction personnalisée accrochée au filtre woocommerce_available_payment_gateways
, où je peux désactiver les passerelles de paiement en fonction des articles du panier (type de produit):
add_filter('woocommerce_available_payment_gateways', 'conditional_payment_gateways', 10, 1);
function conditional_payment_gateways( $available_gateways ) {
// Pas dans l'administrateur
if( is_admin() )
return $available_gateways;
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$prod_variable = $prod_simple = $prod_subscription = false;
// Obtenir l'objet WC_Product
$product = wc_get_product($cart_item['product_id']);
// Obtenir les types de produits dans le panier (exemple)
if($product->is_type('simple')) $prod_simple = true;
if($product->is_type('variable')) $prod_variable = true;
if($product->is_type('subscription')) $prod_subscription = true;
}
// Supprimer la passerelle de paiement contre remboursement (cod) pour les produits simples
if($prod_simple)
unset($available_gateways['cod']); // unset 'cod'
// Supprimer la passerelle de paiement Paypal (paypal) pour les produits variables
if($prod_variable)
unset($available_gateways['paypal']); // unset 'paypal'
// Supprimer la passerelle de paiement par virement bancaire (Bacs) pour les produits d'abonnement
if($prod_subscription)
unset($available_gateways['bacs']); // unset 'bacs'
return $available_gateways;
}
Le code va dans le fichier function.php de votre thème enfant actif (ou thème) ou également dans n'importe quel fichier de plugin.
Tout le code est testé sur Woocommerce 3+ et fonctionne.
Ceci n'est qu'un exemple pour vous montrer comment les choses peuvent fonctionner. Vous devrez l'adapter