从 WooCommerce 中具有特定标签的产品中获取购物车商品数量
Get cart items quantities from products with specific tag in WooCommerce
思路:
客户将一个盒子放入购物车(四种不同的简单产品)。每盒可装 4、9、16 或 24 件。
然后客户开始选择要放入箱子中的产品。这些产品应来自混搭产品标签。如果不是,它们将单独包装,但更重要的是,不算混搭产品。
我不知道怎么做是这样的:
该函数需要计算购物车中有多少箱子,并自动计算可以添加多少件。
整体例子:
客户添加了可装4件的盒子和可装16件的盒子。客户现在总共可以将 20 种混搭产品添加到购物车。
如果客户没有将 20 件混搭产品添加到他们的购物车,则会显示一条消息。如果客户将超过 20 种混搭产品添加到他们的购物车,则会显示不同的消息。
以下是一些消息示例:
“您添加了适合 XX 件的盒子。请将额外的 XX 混搭产品添加到您的购物车。注意:非混搭产品将单独包装在玻璃纸袋中。”
"您已添加XX盒。您可以添加XX件。请在您的购物车中添加额外的XX混搭产品。注意:非混搭产品将单独包装在玻璃纸袋中."
这是我需要帮助修改的代码:
add_action('woocommerce_before_shop_loop', 'number_of_pieces_in_boxes', 1, 1 );
add_action('woocommerce_before_add_to_cart_form', 'number_of_pieces_in_boxes', 1, 1 );
function number_of_pieces_in_boxes( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;
global $product;
$product_count = WC()->cart->cart_contents_count;
$product_ids = array( 1718, 1719, 1720, 1721 );
$fits_four = '4';
$fits_nine = '9';
$fits_sixteen = '16';
$fits_twentyfour = '24';
$piece_slug = 'mix-and-match';
$in_cart = false;
foreach( WC()->cart->get_cart() as $cart_item ) {
$product_in_cart = $cart_item['product_id'];
if ( in_array( $product_in_cart, $product_ids ) && has_term( 'mix-and-match', 'product_tag', $product_in_cart, $product_ids ) ) {
$in_cart = true;
break;
}
}
if ( ! $in_cart ) {
echo '<div class="product-count">You have '.$product_count.' pieces in your cart whereof none fits inside a box. We will pack and wrap them for you.</div>';
} else {
echo '<div class="product-count">You have '.$product_count.' pieces in your cart.</div>';
}
}
我真的很感激我能得到的任何帮助。
- 您使用的钩子默认不包含
$cart
作为参数
- 要从包含特定标签的购物车中的产品中获取购物车商品数量,您可以使用 WC_Cart::get_cart_item_quantities()
- 在
$box_ids
数组中添加箱子+产品ID的内容,确保这些产品不包含相关标签
- 带有特定标签的产品的购物车商品数量保存在计数器中
- 每个盒子可以装的东西 * 购物车里每个盒子的件数存储在另一个柜台
- 有了这个包含您需要的所有数据的基本答案,您可以选择任何一种方式,这取决于您具体想要什么
所以你得到:
function action_woocommerce_before_add_to_cart_form() {
// Settings
$term = 'mix-and-match';
$taxonomy = 'product_tag';
// Box IDs. Important, these should not contain the term!
// Contents => Product ID
$box_ids = array(
4 => 1718,
9 => 1719,
16 => 1720,
20 => 1721
);
// Initialize
$total_term = 0;
$total_box = 0;
// True
if ( WC()->cart ) {
// Loop trough cart items quantities
foreach( WC()->cart->get_cart_item_quantities() as $product_id => $cart_item_quantity ) {
// Contains the definite term
if ( has_term( $term, $taxonomy, $product_id ) ) {
// Add the cart item quantity from this certain product to the counter
$total_term += $cart_item_quantity;
// The box ID is in the cart
} elseif( in_array( $product_id, $box_ids ) ) {
// Add contens * the cart item quantity to the counter
$total_box += ( array_search ( $product_id, $box_ids ) * $cart_item_quantity );
}
}
}
echo '<p>Total term: ' . $total_term . '</p>';
echo '<p>Total box = ' . $total_box . '</p>';
}
add_action( 'woocommerce_before_add_to_cart_form', 'action_woocommerce_before_add_to_cart_form', 10, 0 );
思路:
客户将一个盒子放入购物车(四种不同的简单产品)。每盒可装 4、9、16 或 24 件。
然后客户开始选择要放入箱子中的产品。这些产品应来自混搭产品标签。如果不是,它们将单独包装,但更重要的是,不算混搭产品。
我不知道怎么做是这样的:
该函数需要计算购物车中有多少箱子,并自动计算可以添加多少件。
整体例子:
客户添加了可装4件的盒子和可装16件的盒子。客户现在总共可以将 20 种混搭产品添加到购物车。
如果客户没有将 20 件混搭产品添加到他们的购物车,则会显示一条消息。如果客户将超过 20 种混搭产品添加到他们的购物车,则会显示不同的消息。
以下是一些消息示例:
“您添加了适合 XX 件的盒子。请将额外的 XX 混搭产品添加到您的购物车。注意:非混搭产品将单独包装在玻璃纸袋中。”
"您已添加XX盒。您可以添加XX件。请在您的购物车中添加额外的XX混搭产品。注意:非混搭产品将单独包装在玻璃纸袋中."
这是我需要帮助修改的代码:
add_action('woocommerce_before_shop_loop', 'number_of_pieces_in_boxes', 1, 1 );
add_action('woocommerce_before_add_to_cart_form', 'number_of_pieces_in_boxes', 1, 1 );
function number_of_pieces_in_boxes( $cart ) {
if ( is_admin() && !defined( 'DOING_AJAX' ) ) return;
global $product;
$product_count = WC()->cart->cart_contents_count;
$product_ids = array( 1718, 1719, 1720, 1721 );
$fits_four = '4';
$fits_nine = '9';
$fits_sixteen = '16';
$fits_twentyfour = '24';
$piece_slug = 'mix-and-match';
$in_cart = false;
foreach( WC()->cart->get_cart() as $cart_item ) {
$product_in_cart = $cart_item['product_id'];
if ( in_array( $product_in_cart, $product_ids ) && has_term( 'mix-and-match', 'product_tag', $product_in_cart, $product_ids ) ) {
$in_cart = true;
break;
}
}
if ( ! $in_cart ) {
echo '<div class="product-count">You have '.$product_count.' pieces in your cart whereof none fits inside a box. We will pack and wrap them for you.</div>';
} else {
echo '<div class="product-count">You have '.$product_count.' pieces in your cart.</div>';
}
}
我真的很感激我能得到的任何帮助。
- 您使用的钩子默认不包含
$cart
作为参数 - 要从包含特定标签的购物车中的产品中获取购物车商品数量,您可以使用 WC_Cart::get_cart_item_quantities()
- 在
$box_ids
数组中添加箱子+产品ID的内容,确保这些产品不包含相关标签 - 带有特定标签的产品的购物车商品数量保存在计数器中
- 每个盒子可以装的东西 * 购物车里每个盒子的件数存储在另一个柜台
- 有了这个包含您需要的所有数据的基本答案,您可以选择任何一种方式,这取决于您具体想要什么
所以你得到:
function action_woocommerce_before_add_to_cart_form() {
// Settings
$term = 'mix-and-match';
$taxonomy = 'product_tag';
// Box IDs. Important, these should not contain the term!
// Contents => Product ID
$box_ids = array(
4 => 1718,
9 => 1719,
16 => 1720,
20 => 1721
);
// Initialize
$total_term = 0;
$total_box = 0;
// True
if ( WC()->cart ) {
// Loop trough cart items quantities
foreach( WC()->cart->get_cart_item_quantities() as $product_id => $cart_item_quantity ) {
// Contains the definite term
if ( has_term( $term, $taxonomy, $product_id ) ) {
// Add the cart item quantity from this certain product to the counter
$total_term += $cart_item_quantity;
// The box ID is in the cart
} elseif( in_array( $product_id, $box_ids ) ) {
// Add contens * the cart item quantity to the counter
$total_box += ( array_search ( $product_id, $box_ids ) * $cart_item_quantity );
}
}
}
echo '<p>Total term: ' . $total_term . '</p>';
echo '<p>Total box = ' . $total_box . '</p>';
}
add_action( 'woocommerce_before_add_to_cart_form', 'action_woocommerce_before_add_to_cart_form', 10, 0 );