gpt4 book ai didi

php - 根据 Woocommerce 中的其他购物车商品数量自动将特定产品添加到购物车

转载 作者:搜寻专家 更新时间:2023-10-31 21:20:05 24 4
gpt4 key购买 nike

我正在尝试根据购物车中的产品数量将名为 (Delivery Charge) 的产品添加到购物车。

购物车示例:
产品 A(数量 5)
产品 B(数量 2)
产品 C(数量 4)
送货费(数量 3)**这是 3,因为这是在添加送货费产品之前添加到购物车的应该计算的总行项目。

我的代码有问题:

/* Function to get total Products (line items) not qty of each */
function count_item_in_cart() {
global $woocommerce;
$counter = 0;

foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) {
$counter++;
}
return $counter;
}

/* Add DC (Delivery Charge Product) to Cart based on qty */
add_action( 'template_redirect', 'delivery_charge_add_product_to_cart' );
function delivery_charge_add_product_to_cart() {
/* Establish Product Delivery Charge Product ID */
global $woocommerce;
$product_id = 4490; /* Product ID to add to cart */
$quantity = count_item_in_cart();

if ($quantity > 0) {
WC()->cart->add_to_cart( $product_id, $quantity);
}
}

它总是返回一个更大的数字。我认为这是计算每个产品的数量而不是实际产品项目。

如有任何帮助,我们将不胜感激!

最佳答案

每次将产品添加到购物车时,以下代码都会自动将您的附加产品“运费”添加/更新到购物车,并将处理所有可能的情况:

add_action( 'woocommerce_before_calculate_totals', 'add_delivery_charge_to_cart', 10, 1 );
function add_delivery_charge_to_cart( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;

if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;

$dcharge_id = 4490; // Product Id "Delivery charge" to be added to cart
$items_count = 0; // Initializing

// Loop through cart items
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
// Check if "Delivery charge" product is already in cart
if( $cart_item['data']->get_id() == $dcharge_id ) {
$dcharge_key = $cart_item_key;
$dcharge_qty = $cart_item['quantity'];
}
// Counting other items than "Delivery charge"
else {
$items_count++;
}
}

// If product "Delivery charge" is in cart, we check the quantity to update it if needed
if ( isset($dcharge_key) && $dcharge_qty != $items_count ) {
$cart->set_quantity( $dcharge_key, $items_count );
}
// If product "Delivery charge" is not in cart, we add it
elseif ( ! isset($dcharge_key) && $items_count > 0 ) {
$cart->add_to_cart( $dcharge_id, $items_count );
}
}

代码进入事件子主题(或事件主题)的 functions.php 文件。经过测试并有效。

关于php - 根据 Woocommerce 中的其他购物车商品数量自动将特定产品添加到购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com