2016-12-21 16 views
2

Я нашел этот большой отрывок из этого websiteWooCommerce - Проверьте, если элемент уже находятся в корзине

Следующая функция, чтобы проверить, является ли конкретный продукт существует в корзине:

 function woo_in_cart($product_id) { 
     global $woocommerce;   
     foreach($woocommerce->cart->get_cart() as $key => $val) { 
      $_product = $val['data']; 

      if($product_id == $_product->id) { 
       return true; 
      } 
     }   
     return false; 
     } 

И это использовать в любом месте необходимо:

 if(woo_in_cart(123)) { 
    // Product is already in cart 
    } 

проблема заключается в том, как использовать его, чтобы проверить несколько продуктов, как это:

 if(woo_in_cart(123,124,125,126...)) { 
    // Product is already in cart 
    } 

Спасибо.

source

+0

Вы должны вызвать функцию несколько раз или переписать его. – Twinfriends

+0

Вы можете проверить все товары, если (woo_in_cart (123)) { // Товар уже зачислен в } –

+0

Мне нужно, чтобы этот способ проверки нескольких продуктов: if (woo_in_cart (123,124,125,126 ...))) { // Товар уже добавлен в корзину } – mysticalghoul

ответ

7

Вот пользовательская функция с аргументом, который принимает уникальный идентификатор целого числа продуктов или массив идентификаторов продуктов, и что возвращает количество совпадающих идентификаторов, которые находятся в корзине:

function matched_cart_items($product_ids) { 

    if(!WC()->cart->is_empty()): 

     // Initialise the count 
     $count = 0; 

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

      $items_id = $cart_item['product_id']; 

      // For an array of product IDS 
      if(is_array($product_ids) && in_array($items_id, $product_ids)) 
       $count++; // incrementing the counted items 

      // for a unique product ID (integer or string value) 
      if($product_ids == $items_id) 
       $count++; // incrementing the counted items 

     endforeach; 

     // returning counted items 
     return $count; 

    endif; 
} 

Этот код содержится в файле functions.php вашей активной дочерней темы (активная тема или любой файл плагина).

Код проверен и работает.


ПРИМЕНЕНИЕ:

1) Для ID уникального продукта (целое число):

$product_id = 102; 

// Usage as a condition in an if statement 
if(0 < matched_cart_items($product_ids)){ 
    echo '<p>There is "'. matched_cart_items($product_ids) .'"matched items in cart</p><br>'; 
} else { 
    echo '<p>NO matched items in cart</p><br>'; 
} 

2) Для получения массива идентификаторов продукта:

$product_ids = array(102,107,118); 

// Usage as a condition in an if statement 
if(0 < matched_cart_items($product_ids)){ 
    echo '<p>There is "'. matched_cart_items($product_ids) .'"matched items in cart</p><br>'; 
} else { 
    echo '<p>NO matched items in cart</p><br>'; 
} 

3) Для массива идентификаторов товаров для 3 или более товаров, соответствующих товарам корзины, например:

$product_ids = array(102, 107, 118, 124, 137); 

// Usage as a condition in an if statement (for 3 matched items or more) 
if(3 <= matched_cart_items($product_ids)){ 
    echo '<p>There is "'. matched_cart_items($product_ids) .'"matched items in cart</p><br>'; 
} else { 
    echo '<p>NO matched items in cart</p><br>'; 
} 
+0

Извините за поздний ответ, что он не работает для меня. $ product_ids = array (7657,7995,8000,7999,7998,7997,7996); if (0 mysticalghoul

+0

@mysticalghoul Хорошо, позвольте мне проверить и повторить проверку на моем тестовом сервере, это должно быть быстро решено (идея для этого скрипта есть) ... Если вам нравится, мы можем общаться в чате Skype (мой идентификатор «marsloic»), так как чат здесь слишком доисторический ... – LoicTheAztec

+0

Спасибо, сэр красивая работа ... – mysticalghoul

2

Случай 1: Передайте массив в качестве аргумента.

function woo_in_cart($arr_product_id) { 
     global $woocommerce;   
     $cartarray=array(); 

     foreach($woocommerce->cart->get_cart() as $key => $val) { 
      $_product = $val['data']; 
      array_push($cartarray,$_product->id); 
     }   
     $result = !empty(array_intersect($cartarray,$arr_product_id)); 
     return $result; 

     } 

Как вызвать функцию

$is_incart=array(2,4,8,11); 
print_r(woo_in_cart($is_incart)); 

Случай 2: Используйте код, который вы запускаете.

$is_in_product_cart=array(123,124,125,126,..); 

foreach($is_in_product_cart as $is_in_cart) 
    if(woo_in_cart($is_in_cart)) 
    { 
     // Product is already in cart 
    } 
} 
+0

Не могли бы вы показать мне полный код в функции() – mysticalghoul

+0

«Cant use function return value» – mysticalghoul

+0

, пожалуйста, проверьте второй код –

0

Ошибка в функции woo_in_cart. Здесь правильному:

function woo_in_cart($arr_product_id) { 
    global $woocommerce; 
    $cartarray=array(); 

    foreach($woocommerce->cart->get_cart() as $key => $val) { 
     $_product = $val['product_id']; 
     array_push($cartarray,$_product); 
    } 

    if (!empty($cartarray)) { 
     $result = array_intersect($cartarray,$arr_product_id); 
    } 

    if (!empty($result)) { 
     return true; 
    } else { 
     return false; 
    }; 

} 

Вот пример использования:

//Set IDs Array variable 

$my_products_ids_array = array(22,23,465); 
if (woo_in_cart($my_products_ids_array)) { 
    echo 'ohh yeah there some of that products in!'; 
}else { 
    echo 'no matching products :('; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^