我还是非常想了解PHP,所以我想知道是否有人会耐心地请我指出修改以下代码的方向?
原样的代码会在达到特定值时将特定产品添加到登录用户的购物车中(如果没有,则将其删除)。
我希望能够添加到购物车中,以便根据小计的范围将多件礼物添加到购物车(例如,当范围为75- 99,如果范围为100-150,则替换为礼品2,依此类推)。
在这里和其他地方,我已经做了大量的阅读工作,但是由于我只是n00b的亲戚,所以我有点不知所措!鉴于现有代码满足了我的大部分需求,我敢肯定必须有一种(相对)简单的方法来添加上述功能...
取自Adding a promotional product when a certain cart amount is reached答案,但有微小变化:
add_action( 'woocommerce_before_calculate_totals', 'adding_promotional_product', 10, 1 );
function adding_promotional_product( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$promo_id = 7161; // <=== <=== <=== Set HERE the ID of your promotional product
$targeted_cart_subtotal = 75; // <=== Set HERE the target cart subtotal
$has_promo = false;
$subtotal = 0;
if ( ! $cart->is_empty() && is_user_logged_in() ) {
// Iterating through each item in cart
foreach ($cart->get_cart() as $item_key => $cart_item ){
$product_id = version_compare( WC_VERSION, '3.0', '<' ) ? $cart_item['data']->id : $cart_item['data']->get_id();
// If Promo product is in cart
if( $product_id == $promo_id ) {
$has_promo = true;
$promo_key= $item_key;
} else {
// Adding subtotal item to global subtotal
$subtotal += $cart_item['line_subtotal'];
}
}
// If Promo product is NOT in cart and target subtotal reached, we add it.
if( ! $has_promo && $subtotal >= $targeted_cart_subtotal ) {
$cart->add_to_cart( $promo_id );
// echo 'add';
// If Promo product is in cart and target subtotal is not reached, we remove it.
} elseif( $has_promo && $subtotal < $targeted_cart_subtotal ) {
$cart->remove_cart_item( $promo_key );
}
}
}
到目前为止,我对他的代码所做的唯一更改是对商品ID和小计金额以及更改
if ( ! $cart->is_empty() ) {
到
if ( ! $cart->is_empty() && is_user_logged_in() ) {
以便仅在客户登录网站时才添加礼物(似乎可以正常工作,希望这是最佳做法/安全!)。
我真的不确定如何在Loic的代码中引入“如果范围A做X,如果范围B做Y”。谁能让我知道正确的方法吗?
我还发现了Automatically add products to WooCommerce cart based on range conditions,它似乎特别有用,但远超我的头脑!
非常感谢任何帮助!
让我知道是否有任何不清楚的地方,今天由于睡眠不足而使自己困惑。