2017-08-09 1 views
2

J'essaie de désactiver une méthode d'expédition si une classe d'expédition spécifique est dans le panier. Im en utilisant la nouvelle version de woocommerce.Désactiver la méthode d'expédition spécifique si un article du panier utilise un ID de classe d'expédition spécifique

Ci-dessous est mon code pour ma tâche. Il est placé à la fin de mon fichier functions.php de mon thème.

Malheureusement, cela ne fonctionne pas.

add_filter('woocommerce_package_rates', 'businessbloomer_hide_free_shipping_for_shipping_class', 10, 2); 
function businessbloomer_hide_free_shipping_for_shipping_class($rates, $package) { 
    $shipping_class_target = 513;   // ID OF MY SHIPPING_CLASS 
    $in_cart = false; 
    foreach(WC()->cart->cart_contents as $key => $values) { 
     if($values[ 'data' ]->get_shipping_class_id() == $shipping_class_target) { 
      $in_cart = true; 
      break; 
     } 
    } 
    if($in_cart) { 
     unset($rates['flat_rate:2']);  //VALUE:ID OF MY SHIPPING METHOD 
    } 
    return $rates; 
} 

Répondre

3

Je l'ai testé en simplifiant un peu votre code (avec les ids de mes paramètres de WC) et il fonctionne:

add_filter('woocommerce_package_rates', 'custom_hide_shipping_methods', 10, 2); 
function custom_hide_shipping_methods($rates, $package) { 
    foreach(WC()->cart->get_cart() as $cart_item ) { 
     $product = $cart_item[ 'data' ]; // The WC_Product object 
     if($product->get_shipping_class_id() == 513) { // <== ID OF MY SHIPPING_CLASS 
      unset($rates['flat_rate:2']); // Removing specific shipping method 
      break; // we stop the loop 
     } 
    } 
    return $rates; 
} 

Donc, votre code devrait fonctionner trop(si vous avez définir les identifiants corrects)

MAIS dont vous avez besoin (après avoir sauvegardé votre code dans le fichier function.php de votre thème actif):

1) Pour supprimer tous les éléments du chariot qui reste dans panier lors du test.

2) Pour rafraîchir les caches d'expédition:
Pour ce faire, vous pouvez aller dans une zone d'expédition et de désactiver un « taux fixe » (par exemple) et « enregistrer ». Puis réactivez ce "taux forfaitaire" et "enregistrer". Vous avez terminé.

Vous pouvez maintenant tester à nouveau et il devrait fonctionner

+1

Vous êtes génial! L'actualisation du cache l'a fait pour moi! Ty Monsieur. – sHamann

+0

Peu en retard à la fête, juste une question rapide 'var_dump ($ rates)' ne renvoie rien sur la page '/ cart'. Nouveau pour wordpress ici. –

+0

@SanjokGurung Comme il s'agit d'un filtre, pour avoir une idée des données des tarifs d'expédition, il vaut mieux essayer ailleurs: 'echo '

'; print_r(WC()->session->get('shipping_for_package_0')); echo '
';' – LoicTheAztec