2017-01-06 1 views
0

Я пытаюсь написать сценарий, который позволяет пользователю добавлять только один продукт из каждой категории.Woocommerce Добавить только 1 продукт на основе категории

Мой метод позади этого заключается в следующем: -

  • Пользователь нажимает на Добавить запись
  • Если товар находится в корзине с таким же количеством конечного сценария
  • Если количество отличается обновление с новым количеством
  • Если товара не в корзине, проверьте наличие других предметов в корзине, относящейся к одной категории
  • Если предметы существуют, удалите изделия, относящиеся к той же категории
  • Добавить новый товар

Возможно ли это?

Я не уверен, с чего начать, любая помощь будет принята с благодарностью.

Я знаю, что может вызвать событие JQuery, используя следующий тег: -

jQuery('button').on('added_to_cart',function() { 
    jQuery.post("?wc-ajax=add_to_cart", 
    { 
     product_id: jQuery(this).attr('data-product_id'), 
     quantity: jQuery(this).attr('data-quantity'), 
    }, 
    function(data,status){ 
    }); 
}); 

Но это, где я застрял.

Заранее спасибо.

+0

Я бы посоветовал вам сделать свою проверку на внутреннем интерфейсе с помощью кнопки [ 'woocommerce_add_to_cart_validation'] (https://github.com/woocommerce/ woocommerce/blob/76b32c9aa52ebac70fe5a60a8d56351218760471/includes/class-wc-form-handler.php # L624) filter – helgatheviking

+0

@helgatheviking Я попытался использовать это, но он добавляет продукт в корзину и затем толкает меня на страницу продукта. –

ответ

0

Я использовал следующее для того чтобы достигнуть того, что я хотел: -

<?php 

if (! is_admin()) add_action('woocommerce_add_to_cart', 'add_product_to_cart', 1); 
function add_product_to_cart() { 

    global $woocommerce; 

    // Getting posted product information 
    $post_product_id = $_POST['product_id']; 
    $post_product_qty = $_POST['quantity']; 
    $post_product_cats = wp_get_post_terms($post_product_id , 'product_cat'); 
    $post_product_cat = $post_product_cats[0]->name; 

    // Getting cart items 
    $items = $woocommerce->cart->get_cart(); 

    foreach($items as $item => $values) { 

     // Getting cart product information 
     $_product = $values['data']->post; 
     $_product_id = $_product->ID; 
     $_product_cats = wp_get_post_terms($_product_id , 'product_cat'); 
     $_product_cat = $_product_cats[0]->name; 
     $_product_qty = $values['quantity']; 
     $prod_unique_id = WC()->cart->generate_cart_id($_product_id); 

     // Check if product categories are the same 
     if($post_product_cat == $_product_cat){ 
      // Check if the product ID's are the same 
      if($post_product_id == $_product_id){ 
       // Check if quantities are different 
       if($post_product_qty != $_product_qty){ 
        // Update quantities if they are different 
        WC()->cart->set_quantity($prod_unique_id, $post_product_qty); 
       } 
      } else { 
       // Remove items that are in the same category 
       unset(WC()->cart->cart_contents[$prod_unique_id]); 
      } 
     } 

    } 

}