我使用wordpress 4.2.2和woocommerce 2.3.11构建我的电子商务销售葡萄酒。 我创建了一个自定义函数,只能在6个多个瓶子上结束订单。 在此之前我没有任何问题,但我有2个类别包装6瓶,所以我想避免这两个类别将计入总物品数量。 我不是php的专家,所以我尝试创建一个函数,检查每个项目是否在类别内,如果属于一个包类别,减去一个项目。 只有当这2个类别中有一个项目时才能正常工作,但如果我在购物车上添加2个包裹,则只会减去一个。
add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$prodotti = $values['data'];
$terms = get_the_terms ($prodotti->id, 'product_cat');
foreach ($terms as $term){
$categoria = $term->term_id;
}
if (($categoria == 169) || ($categoria == 152)) {
$pacchetti = $values ['quantity'];
$totale = ($total_products-$pacchetti);
} else {
$totale = $total_products;
}
}
echo $totale;
if ( ( $totale % $multiples ) > 0 )
wc_add_notice( sprintf( __('You need to buy in quantities of 6 products', 'woocommerce'), $multiples ), 'error' );
}
期望的计数:
现有计数
我为每个解决方案开放,让它发挥作用。
非常感谢你!
答案 0 :(得分:2)
您的代码对我来说非常好。我认为您缺少的一件事是has_term()
功能,可以更可靠地测试哪些产品属于您的两个特殊类别。
add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
$totale = 0;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
$prodotti = $values['data'];
if( ! has_term( array( 169, 152 ), 'product_cat', $prodotti->id ) ){
$totale += $values['quantity'];
}
}
echo $totale;
if ( ( $totale % $multiples ) > 0 ){
wc_add_notice( sprintf( __('You need to buy in multiples of %d products', 'your-textdomain'), $multiples ), 'error' );
}
}