2017-10-06 11 views
1

J'essaie de rediriger ma page de boutique personnalisée vers la page du panier après que l'utilisateur ait sélectionné les attributs personnalisés (responsabilité et heures), puis clique sur le bouton d'achat.Ajouter des attributs personnalisés d'un produit variable au panier dans WooCommerce

J'ai écrit un code JS personnalisé qui récupère la variable_id et la valeur des attributs et l'ajoute à l'URL pour qu'il soit automatiquement ajouté au panier et redirigé vers la page du panier.

href="yourdomain.com/?add-to-cart=47&variation_id=88&quantity=3&attribute_pa_colour=blue&attribute_pa_size=m" 

C'est le format d'URL que j'ai trouvé dans un blog: (https://businessbloomer.com/woocommerce-custom-add-cart-urls-ultimate-guide/) et je fait mon lien dans ce format.

Mon lien est:

localhost/wordpress/cart/?add-to-cart=1185&variation_id=1641&quantity=1&attribute_pa_liability=2_million&attribute_pa_hours=500_hours 

Lorsque la responsabilité et les heures est mon attribut personnalisé qui a des valeurs que 1 million, 2 millions et 500 heures, 750 heures respectivement.

Mais quand il est redirigé vers la page du panier woocommerce donnez-moi une erreur et montre sa boîte d'alerte qui affiche le message d'erreur comme "la responsabilité et les heures sont obligatoires".

Je pense que woocommerce est incapable d'obtenir les valeurs d'attribut via mon URL. Est-ce que quelqu'un peut expliquer pourquoi cela se produit et quelle est l'erreur s'il y en a?

+0

comment obtenez-vous ces propriétés sur la page de paiement? – madalinivascu

+0

Je récupère les valeurs de attribute_pa_liability et attribute_pa_hours à partir de $ _GET dans une fonction membership_forms_handler et vérifie si toutes les listes déroulantes des attributs sont sélectionnées et récupère la valeur et crée le lien vers lequel l'utilisateur est redirigé. Ci-dessous le code qui est utilisé, $ redirect_url = home_url(). "/ Cart /? Add-to-cart =". $ _ GET ["membership_product"]. "& Variation_id =". $ _ GET ['variation_id']. " & quantity = ". $ _ GET [" quantity "]." & attribute_pa_liability = ". $ _ GET ['attribute_pa_liability']." & attribute_pa_hours = ". $ _ GET ['attribut_pa_heures']; wp_redirect ($ redirect_url); –

+0

et quand l'utilisateur est redirigé comment allez-vous chercher les paramètres sur cette page? Je veux dire sur 'localhost/wordpress/panier /? Add-to-cart = 1185 & variation_id = 1641 & quantité = 1 & attribute_pa_liability = 2_million & attribute_pa_hours = 500_hours' – madalinivascu

Répondre

0

Mise à jour

Ce guide "Business Bloomer" est un peu vieillot ... Vous avez besoin de 2 choses:

1). L'URL correcte

Vous n'avez pas besoin d'ajouter au panier le produit et l'ID de la variante avec tous les attributs associés. Vous avez juste besoin d'ajouter au panier l'ID de la variation + vos attributs personnalisés comme ceci: localhost/wordpress/cart/?add-to-cart=1641&quantity=1&pa_liability=2_million&pa_hours=500_hours

2). Enregistrement (et l'affichage) vos attributs personnalisés:

// Store the custom data to cart object 
add_action('woocommerce_add_cart_item_data', 'save_custom_product_data', 10, 2); 
function save_custom_product_data($cart_item_data, $product_id) { 
    $bool = false; 
    $data = array(); 
    if(isset($_REQUEST['pa_liability'])) { 
     $cart_item_data['custom_data']['pa_liability'] = $_REQUEST['pa_liability']; 
     $data['pa_liability'] = $_REQUEST['pa_liability']; 
     $bool = true; 
    } 
    if(isset($_REQUEST['pa_hours'])) { 
     $cart_item_data['custom_data']['pa_hours'] = $_REQUEST['pa_hours']; 
     $data['pa_hours'] = $_REQUEST['pa_hours']; 
     $bool = true; 
    } 
    if($bool) { 
     // below statement make sure every add to cart action as unique line item 
     $cart_item_data['custom_data']['unique_key'] = md5(microtime().rand()); 
     WC()->session->set('custom_variations', $data); 
    } 
    return $cart_item_data; 
} 

// Displaying the custom attributes in cart and checkout items 
add_filter('woocommerce_get_item_data', 'customizing_cart_item_data', 10, 2); 
function customizing_cart_item_data($cart_data, $cart_item) { 
    $custom_items = array(); 
    if(! empty($cart_data)) $custom_items = $cart_data; 

    // Get the data (custom attributes) and set them 
    if(! empty($cart_item['custom_data']['pa_liability'])) 
     $custom_items[] = array(
      'name'  => 'pa_liability', 
      'value'  => $cart_item['custom_data']['pa_liability'], 
     ); 
    if(! empty($cart_item['custom_data']['pa_hours'])) 
     $custom_items[] = array(
      'name'  => 'pa_hours', 
      'value'  => $cart_item['custom_data']['pa_hours'], 
     ); 
    return $custom_items; 
} 

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

testé et fonctionne

Vous devrez ajouter ces données aux éléments de commande trop

0

d'abord décocher l'ajax ajouter à l'option de panier à partir du panneau d'administration Ensuite, vous devez faire une variation avec vos attributs puis trouvez l'identifiant du produit, la quantité, le nom de l'attribut et le nom de l'attribut (utilisé pour montrer dans le panier) et l'ID de la variante, puis faites en sorte que l'URL de votre panier soit donnée ci-dessous.

le lien Ajouter au panier avec l'attribut est: https://www.your-domain.com/?add-to-cart=(product id) & = (quantité numérique) & attribute_pa_ (limace attribut) = (attribut name) & variation_id = (id variation)

Pour plus de détails vous pouvez visiter http://www.codemystery.com/wordpress-woocommerce-add-cart-link-variations/