Comment obtenir des slugs d'attribut de variante de produit à partir d'un article de panier Woocommerce
P粉895187266
P粉895187266 2024-02-04 10:19:26
0
1
469

Je dois vérifier le panier pour voir si un attribut de produit spécifique a été ajouté sur un produit. (Il s'agit d'une fonction d'expédition personnalisée connectée à woocommerce_package_rates.)

J'ai l'ID de variante pour chaque article dans mon panier mais je ne sais pas comment obtenir le slug de variante pour cet article...

foreach (WC()->cart->get_cart() as $cart_item) {

    // $product_in_cart = $cart_item['product_id'];
    
    $variation_id = $cart_item['variation_id'] > 0 ? $cart_item['variation_id'] : 
    $cart_item['product_id'];
    
    $variation = wc_get_product($variation_id);

    $variation_name = $variation->get_formatted_name(); //I want to get the slug instead.

    // if there is the swatch variation of any product in the cart.
    if (  $variation_name == 'swatch') $cart_has_swatch = "true"; 
    
}

P粉895187266
P粉895187266

répondre à tous(1)
P粉600402085

Vous avez provoqué un certain chaos. Sur le projet de panier WooCommerce :

  • Les objets de variantes de produit sont toujours $cart_item['data'] ;
  • Les
  • Attributs de variation $cart_item['variation'] sont accessibles via (qui est un tableau de taxonomie d'attributs de produit, de paires de valeurs de slug d'attribut de produit) .
  • $variation->get_formatted_name() est le nom de la variante du produit (formaté) et n'est donc pas un attribut de variante du produit.
  • Utilisez woocommerce_package_rates 过滤器挂钩,使用 $package['contents'] 而不是 WC()->cart->get_cart().

Votre question n'est pas très claire car nous ne savons pas si vous recherchez le terme « échantillon » dans la taxonomie des attributs ou dans la valeur du segment d'attribut.

Essayez ce qui suit :

add_filter( 'woocommerce_package_rates', 'filtering_woocommerce_package_rates', 10, 2 );
function filtering_woocommerce_package_rates( $rates, $package ) {
    $cart_has_swatch = false; // initializing

    // Loop through cart items in this shipping package
    foreach( $package['contents'] as $cart_item ) {
        // Check for product variation attributes
        if( ! empty($cart_item['variation']) ) {
            // Loop through product attributes for this variation
            foreach( $cart_item['variation'] as $attr_tax => $attr_slug ) {
                // Check if the world 'swatch' is found
                if ( strpos($attr_tax, 'swatch') !== false || strpos( strtolower($attr_slug), 'swatch') !== false ) {
                    $cart_has_swatch = true; // 'swatch' found
                    break; // Stop the loop
                }
            }
        }
    }

    if ( $cart_has_swatch ) {
        // Do something
    }


    return $rates;
}

Cela devrait fonctionner pour vous.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal