Untitled
unknown
plain_text
7 months ago
7.3 kB
2
Indexable
Never
function b2bking_get_min_tiered_price($product){ if (!is_a($product,'WC_Product_Variation') && !is_a($product,'WC_Product')){ $product = wc_get_product($product); } $price = wc_price($product->get_price()); $priceoriginal = $price; if (!is_a($product,'WC_Product_Variation') && !is_a($product,'WC_Product')){ return $price; } $user_id = get_current_user_id(); $account_type = get_user_meta($user_id,'b2bking_account_type', true); if ($account_type === 'subaccount'){ // for all intents and purposes set current user as the subaccount parent $parent_user_id = get_user_meta($user_id, 'b2bking_account_parent', true); $user_id = $parent_user_id; } $currentusergroupidnr = apply_filters('b2bking_b2b_group_for_pricing', b2bking()->get_user_group($user_id), $user_id); $is_b2b_user = get_user_meta( $user_id, 'b2bking_b2buser', true ); // Search price tiers $price_tiers = get_post_meta($product->get_id(), 'b2bking_product_pricetiers_group_'.$currentusergroupidnr, true ); // if no tiers, get regular if (empty($price_tiers)){ $price_tiers = get_post_meta($product->get_id(), 'b2bking_product_pricetiers_group_b2c', true ); } // apply percentage instead of final prices (optiinally) $price_tiers = b2bking()->convert_price_tiers($price_tiers, $product); if (!empty($price_tiers)){ if ( '' !== $product->get_price() ) { if ( $product->is_on_sale() ) { $price = get_post_meta($product->get_id(),'_sale_price',true); if ($is_b2b_user === 'yes'){ // Search if there is a specific price set for the user's group $b2b_price = b2bking()->tofloat(get_post_meta($product->get_id(), 'b2bking_sale_product_price_group_'.$currentusergroupidnr, true )); if (!empty($b2b_price)){ $price = $b2b_price; } } } else { $price = get_post_meta($product->get_id(),'_regular_price',true); if ($is_b2b_user === 'yes'){ // Search if there is a specific price set for the user's group $b2b_price = b2bking()->tofloat(get_post_meta($product->get_id(), 'b2bking_regular_product_price_group_'.$currentusergroupidnr, true )); if (!empty($b2b_price)){ $price = $b2b_price; } } } $price_tiers = array_filter(explode(';', $price_tiers)); $min_price = b2bking()->tofloat($price); $max_price = b2bking()->tofloat($price); // first eliminate all quantities larger than the quantity in cart foreach($price_tiers as $tier){ $tier_values = explode(':', $tier); if (isset($tier_values[1])){ if (b2bking()->tofloat($tier_values[1]) < $min_price){ $min_price = b2bking()->tofloat($tier_values[1]); } } } $min_price = b2bking()->b2bking_wc_get_price_to_display( $product, array( 'price' => b2bking()->get_woocs_price($min_price ) ) ); return wc_price($min_price); } else { return $price; } } else { // check if product is variable if ($product->is_type('variable')){ $range = false; if (!$range){ // check if any variation has tiered price and if not, return $have_tiered_price_in_any_variation = 'no'; $children = $product->get_children(); foreach ($children as $variation_id){ // Search price tiers $price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_'.$currentusergroupidnr, true ); // if no tiers, get regular if (empty($price_tiers)){ $price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_b2c', true ); } $price_tiers = b2bking()->convert_price_tiers($price_tiers, wc_get_product($variation_id)); if (!empty($price_tiers)){ $have_tiered_price_in_any_variation = 'yes'; break; } } if ($have_tiered_price_in_any_variation === 'no'){ $range = $price; return $price; } // parse all variations and get min and max price across all. Store it in cache. $min_price = 'no'; $max_price = 'no'; // get all variations, and check price for each. foreach ($children as $variation_id){ $productvariation = wc_get_product($variation_id); // get sale/regular price / group price if ( '' !== $productvariation->get_price() ) { if ( $productvariation->is_on_sale() ) { $varprice = get_post_meta($variation_id,'_sale_price',true); if ($is_b2b_user === 'yes'){ // Search if there is a specific price set for the user's group $b2b_price = b2bking()->tofloat(get_post_meta($variation_id, 'b2bking_sale_product_price_group_'.$currentusergroupidnr, true )); if (!empty($b2b_price)){ $varprice = $b2b_price; } } } else { $varprice = get_post_meta($variation_id,'_regular_price',true); if ($is_b2b_user === 'yes'){ // Search if there is a specific price set for the user's group $b2b_price = b2bking()->tofloat(get_post_meta($variation_id, 'b2bking_regular_product_price_group_'.$currentusergroupidnr, true )); if (!empty($b2b_price)){ $varprice = $b2b_price; } } } $varprice = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $varprice ) ); // Search price tiers $price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_'.$currentusergroupidnr, true ); // if no tiers, get regular if (empty($price_tiers)){ $price_tiers = get_post_meta($variation_id, 'b2bking_product_pricetiers_group_b2c', true ); } $price_tiers = b2bking()->convert_price_tiers($price_tiers, $productvariation); if (!empty($price_tiers)){ $price_tiers = array_filter(explode(';', $price_tiers)); $var_min_price = b2bking()->tofloat($varprice); $var_max_price = b2bking()->tofloat($varprice); // first eliminate all quantities larger than the quantity in cart foreach($price_tiers as $tier){ $tier_values = explode(':', $tier); if (b2bking()->tofloat($tier_values[1]) < $var_min_price){ $var_min_price = b2bking()->tofloat($tier_values[1]); } } // clear cache mostly for variable products if (apply_filters('b2bking_clear_wc_products_cache', true)){ WC_Cache_Helper::get_transient_version( 'product', true ); } // adjust price for tax $var_min_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $var_min_price ) ); $var_max_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $var_max_price ) ); } else { $var_min_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $varprice ) ); $var_max_price = b2bking()->b2bking_wc_get_price_to_display( $productvariation, array( 'price' => $varprice ) ); } } if ($min_price === 'no'){ $min_price = $var_min_price; $max_price = $var_max_price; } else { if ($var_min_price < $min_price){ $min_price = $var_min_price; } if ($var_max_price > $max_price){ $max_price = $var_max_price; } } } $range = wc_price($min_price); } return $range; } else { return $price; } } }