Я пытаюсь сделать следующее:WooCommerce - Treat корзины товаров отдельно, если количество больше чем 1
клиентом добавляет продукт с величиной «1» в корзину (поле количество было удалено на страниц одного продукта, поэтому можно добавить только 1).
Если тот же продукт с теми же вариантами добавляется снова, вместо увеличения количества до «2» он добавляет его как отдельный продукт.
Мне удалось сделать это выше с фильтром ниже, который я нашел на форумах WordPress.
add_filter('woocommerce_add_cart_item_data', 'force_separate_item_add', 10, 2);
function force_separate_item_add($cart_item_data, $product_id) {
$unique_cart_item_key = md5(microtime().rand()."Hi Mom!");
$cart_item_data['unique_key'] = $unique_cart_item_key;
return $cart_item_data;
}
объяснение Парень был очень хорошим, и я понимаю: «Когда элемент будет добавлен в корзину, а„ключ“для этого отдельного элемента в корзине создается на основе элемента добавляются и связанные с ним метаданные. Если элемент и его метаданные идентичны другому элементу в корзине, то сгенерированный ключ будет также идентичным, и количество элемента, уже находящегося в корзине, будет просто увеличиваться добавлением количества ".
Приведенный выше код просто добавляет новый ключ, а затем тележка обрабатывает их как отдельные записи.
То, что я пытаюсь сделать сейчас, это найти подходящий фильтр для этого, когда количество будет изменено через корзину. Поэтому, если клиент изменяет количество на «2», он будет генерировать новый ключ для «2-го» элемента и рассматривать его отдельно.
Я пробовал почти каждый связанный фильтр «cart», который я мог найти, ища в документах WooCommerce, делая массовую находку в Sublime в папке плагинов woocommerce для «корзины обновлений», «cart» и т. Д., Но я Боюсь, я не уверен, что использовать. Один я работал больше всего это один:
add_action('woocommerce_before_calculate_totals', 'change_cart_item_price');
function change_cart_item_price($cart_object) {
global $woocommerce;
foreach ($woocommerce->cart->cart_contents as $cart_key => $cart_item_array) {
if($cart_item_array['quantity'] > 1) {
$cart_item_key = md5(microtime().rand()."Hi Mom!");
$cart_item_data['unique_key'] = $cart_item_key;
$woocommerce->cart->set_quantity($cart_item_key, '1');
}
}
return $cart_object;
}
Вот я бегу через корзину объекта, проверяя, если количество больше чем один, и если я назначу новый ключ. Я действительно не знаю, правильно ли я поступаю, или если я полностью не в курсе, поэтому любые указатели будут действительно оценены.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, и я постараюсь предоставить все, что могу.
Большое спасибо.