modify variable product price
modify variable product price
add_filter('woocommerce_variable_price_html', function ($price, $product)
{
$quantity = 1;
$original_prices_list = $sale_prices_lists = $discount_prices_lists = array();
$available_variations = \Wdr\App\Helpers\Woocommerce::getProductChildren($product);
if (!empty($available_variations)) {
$consider_out_of_stock_variants = apply_filters('advanced_woo_discount_rules_do_strikeout_for_out_of_stock_variants', false);
$variants_check_limit = (int) apply_filters('advanced_woo_discount_rules_check variants_limit_for_variable_strikeout', 20);
$variations = [];
if (count($available_variations) > $variants_check_limit) {
$variation_prices = Wdr\App\Controllers\ManageDiscount::$woocommerce_helper->getVariationPrices($product);
$calculate_discount_from = Wdr\App\Controllers\ManageDiscount::$config->getConfig('calculate_discount_from', 'sale_price');
$original_prices = ($calculate_discount_from) == 'regular_price' ? $variation_prices['regular_price'] : $variation_prices['price'];
if (!empty($original_prices)){
$variations[] = array_keys($original_prices, min($original_prices))[0];
$variations[] = array_keys($original_prices, max($original_prices))[0];
}
} else {
$variations = $available_variations;
}
foreach ($variations as $variation_id) {
if (empty($variation_id)) {
continue;
}
$variation = \Wdr\App\Helpers\Woocommerce::getProduct($variation_id);
if(!\Wdr\App\Helpers\Woocommerce::variationIsVisible($variation)){
continue;
}
if(!\Wdr\App\Helpers\Woocommerce::isProductHasStock($variation) && !$consider_out_of_stock_variants) {
continue;
}
$prices = Wdr\App\Controllers\ManageDiscount::calculateInitialAndDiscountedPrice($variation, $quantity);
if (!isset($prices['initial_price']) || !isset($prices['discounted_price'])) {
$original_prices_list[] = \Wdr\App\Helpers\Woocommerce::getProductRegularPrice($variation);
$sale_prices_lists[] = \Wdr\App\Helpers\Woocommerce::getProductPrice($variation);
continue;
}
$original_prices_list[] = $prices['initial_price'];
$discount_prices_lists[] = $prices['discounted_price'];
}
}
$discount_prices_lists = array_unique($discount_prices_lists);
$original_prices_list = array_unique($original_prices_list);
if(empty($discount_prices_lists)){
return $this->removeDuplicateStrikeoutPrice($price);
}
if(empty($original_prices_list)){
return $this->removeDuplicateStrikeoutPrice($price);
}
$discount_prices_lists = array_merge($discount_prices_lists, $sale_prices_lists);
$min_price = min($discount_prices_lists);
$max_price = max($discount_prices_lists);
if ($min_price == 0) {
$price = 'From ' . wc_price($max_price) . $product->get_price_suffix();
} else {
$price = 'From ' . wc_price($min_price) . $product->get_price_suffix();
}
return $price;
}, 9999, 2);