私はWooCommerceメンバーシップを使用しており、特定の商品を購入した場合、私はこれをいくつか別々に動かすことができますが、一緒に来るのが難しいです。WooCommerce、別の特定の商品がカートに入っている場合は、商品価格を変更してください
また、購入しなければならないアイテムの販売価格もあります。そのため、アイテムがセール・ウィンドウにあるかどうかを日付で確認しています。その部分は機能しています。
商品がカートに入っているかどうかを確認するために引数を追加すると、この全体が壊れているようです。 2つの機能を別々に実行すると、どちらも機能します。
function mps_registration_price($cart_object) {
global $post, $product;
// Bail if memberships is not active
if (! function_exists('wc_memberships')) {
return;
}
$user_id = get_current_user_id();
date_default_timezone_set("America/Chicago");
$today = time();
// Check if user was never a member
if (!wc_memberships_get_user_memberships($user_id)) {
if(mps_check_for_product()) {
foreach ($cart_object->get_cart() as $cart_item) {
// get the product id (or the variation id)
$id = $cart_item['data']->get_id();
if($id == 17) {
$salePrice = get_post_meta($id, '_sale_price', true);
$saleFrom = get_post_meta($id, '_sale_price_dates_from', true);
$saleTo = get_post_meta($id, '_sale_price_dates_to', true);
if(!empty($salePrice) && $today >= $saleFrom && $today <= $saleTo) {
$new_price = $salePrice;
} else {
$new_price = get_post_meta($id, '_regular_price', true);
}
// Updated cart item price
$cart_item['data']->set_price($new_price);
}
}
} else {
foreach ($cart_object->get_cart() as $cart_item) {
// get the product id (or the variation id)
$id = $cart_item['data']->get_id();
if($id == 17) {
$salePrice = get_post_meta($id, '_sale_price', true);
$saleFrom = get_post_meta($id, '_sale_price_dates_from', true);
$saleTo = get_post_meta($id, '_sale_price_dates_to', true);
if(!empty($salePrice) && $today >= $saleFrom && $today <= $saleTo) {
$new_price = $salePrice + 50;
} else {
$new_price = get_post_meta($id, '_regular_price', true);
}
// Updated cart item price
$cart_item['data']->set_price($new_price);
}
}
}
}
}
add_filter('woocommerce_before_calculate_totals', 'mps_registration_price', 10, 1);
function mps_check_for_product() {
$product_id = 11;
$product_cart_id = WC()->cart->generate_cart_id($product_id);
$in_cart = WC()->cart->find_product_in_cart($product_cart_id);
if ($in_cart) {
return true;
} else {
return false;
}
}
add_action('woocommerce_before_cart', 'mps_check_for_product');
非常にニース!ありがとうございました! – RiotAct
商品14が商品17より前のカートに入っているかのように、これを逆にすることはできません。論理は同じであると仮定しますが、価格は変更されません。 – RiotAct