2016-12-23 2 views
2

En WooCommerce, je voudrais vérifier si les produits dans le panier ont l'attribut 'Varifocal' (donc je peux afficher/champs de caisse masquer) .Vérifier qu'une valeur d'attribut spécifique est utilisé dans un élément de chariot (variation du produit)

J'ai du mal à obtenir un tableau d'id de toutes les variations qui ont l'attribut 'varifocal'. Ce serait vraiment apprécié si quelqu'un peut me diriger dans la bonne direction.

La taxinomie est pa_lenses.

J'ai actuellement la fonction suivante:

function varifocal() { 
    // Add product IDs here 
    $ids = array(); 

    // Products currently in the cart 
    $cart_ids = array(); 

    // Find each product in the cart and add it to the $cart_ids array 
    foreach(WC()->cart->get_cart() as $cart_item_key => $values) { 
     $cart_product = $values['data']; 
     $cart_ids[] = $cart_product->get_id(); 
    } 

    // If one of the special products are in the cart, return true. 
    if (! empty(array_intersect($ids, $cart_ids))) { 
     return true; 
    } else { 
     return false; 
    } 
} 

Répondre

1

- Mise à jour le code -

Voici une fonction personnalisée conditionnelle qui renverra true lorsque l'un attribut spécifique l'argument est trouvé dans un article de chariot (variation de produit):

function is_attr_in_cart($attribute_value){ 

    $found = false; 

    if(WC()->cart->is_empty()) return $found; 
    else { 

     foreach (WC()->cart->get_cart() as $cart_item){ 
      // Product ID 
      $product_id = $cart_item['product_id']; 

      // Variation ID + attributes 
      if(0 != $cart_item['variation_id']){ 
       $variation_id = $cart_item['variation_id']; 
       foreach($cart_item['variation'] as $attribute_val){ 
        // comparing attribute parameter value with current attribute value 
        if ($attribute_val == $attribute_value) { 
         $found = true; 
         break; 
        } 
       } 
      } 
      if($found) break; 
     } 

     return $found; 
    } 
} 

Code va dans le fichier function.php de votre thème enfant actif (thème actif ou dans un fichier plug-in).

Le code a été testé et fonctionne.


USAGES(exemple)

if(is_attr_in_cart('Varifocal')){ 
    echo '"Varifocal" attribute value has been found in cart items<br>'; 
} else { 
    echo '"Varifocal" <strong>NOT FOUND!!!</strong><br>'; 
} 

Conseil: Cette fonction conditionnelle retourne false si panier est vide

+0

Meilleure solution. Je l'ai testé et ça fonctionne. Merci beaucoup! – PieterM