设置WooCommerce车项目价格为零,如果该产品已经买
问题描述:
我无法凌驾于第二次购买价格。设置WooCommerce车项目价格为零,如果该产品已经买
使用情况是:如果用户已经购买了产品的“944”,那么价格会为下一次订单为0。
含义,客户将仅支付特定产品的一阶,这将是免费为明年的订单。
这里我的代码:
// Enter the ID of the product that shouldn't be purchased again
$no_repeats_id = 944;
$no_repeats_product = wc_get_product($no_repeats_id);
// Get the current product to check if purchasing should be disabled
global $product;
if ($no_repeats_product->is_type('variation')) {
// Bail if we're not looking at the product page for the non-purchasable product
if (! $no_repeats_product->parent->id === $product->id) {
return;
}
// Render the purchase restricted message if we are
if (wc_customer_bought_product(wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id)) {
sv_render_variation_non_purchasable_message($product, $no_repeats_id);
}
} elseif ($no_repeats_id === $product->id) {
if (wc_customer_bought_product(wp_get_current_user()->user_email, get_current_user_id(), $no_repeats_id)) {
// Create your message for the customer here
add_action('woocommerce_before_calculate_totals', 'add_custom_price');
add_action('woocommerce_before_calculate_totals', 'add_custom_price');
function add_custom_price($cart_object) {
$custom_price = 10; // This will be your custome price
$target_product_id = 944;
foreach ($cart_object->cart_contents as $value) {
if ($value['product_id'] == $target_product_id) {
$value['data']->price = $custom_price;
}
/*
// If your target product is a variation
if ($value['variation_id'] == $target_product_id) {
$value['data']->price = $custom_price;
}
*/
}
}
}
}
}
add_action('woocommerce_single_product_summary', 'sv_purchase_disabled_message', 31);
答
这里是使其在woocommerce工作3+过的方式:
add_action('woocommerce_before_calculate_totals', 'conditionally_change_cart_items_price', 10, 1);
function conditionally_change_cart_items_price($cart_object) {
if (is_admin() && ! defined('DOING_AJAX'))
return;
// Set Here your targeted product ID
$targeted_product_id = 944;
// Set Here your custom price (1st purshase)
$custom_price = 10; // First purshase for product ID 944
// Detecting if customer has already bought The targeted product (944)
if(is_user_logged_in()){
$customer = wp_get_current_user();
$customer_id = $customer->ID; // customer ID
$customer_email = $customer->email; // customer email
if(wc_customer_bought_product($customer_email, $customer_id, $targeted_product_id))
$custom_price = 0; // Set to 0 for other purchases (product ID 944)
}
foreach ($cart_object->get_cart() as $cart_item) {
// When targeted product is in cart we change the price
if ($cart_item['product_id'] == $targeted_product_id) {
// Woocommerce 3+ compatibility
if (version_compare(WC_VERSION, '3.0', '<'))
$cart_item['data']->price = $custom_price;
else
$cart_item['data']->set_price($custom_price);
}
}
}
代码放在您的活动子主题的function.php文件(或主题)还是在任何插件文件中。
此代码已经过测试,即使在WooCommerce 3+中也能正常工作
这不起作用。如果(!wc_customer_bought_product($ CUSTOMER_EMAIL,$ CUSTOMER_ID,$ targeted_product_id))需要,如果(wc_customer_bought_product($ CUSTOMER_EMAIL,$ CUSTOMER_ID,$ targeted_product_id)) 没有! –
@MujtabaK ** **更新对不起,我忘了删除了'!'当我正在testings,但此代码的工作... – LoicTheAztec
同意代码的伟大工程增加。非常感谢。 –