In WooCommerce, for a simple product I can add a "Sale!" badge this way:
add_action( 'woocommerce_before_shop_loop_item_title', function() {
global $product;
$akc = get_post_meta(get_the_ID(), '_sale_price', true);
if ( $akc > 0 ) {
echo '<span class="onsale soldout">Sale!</span>';
}
});
For variable products, it doesn't work…
How to get the value of all variation fields with the 'sale_price'?
So how to make it work for variable products?
Turned out only for everyone variable products by this code:
add_action( 'woocommerce_before_shop_loop_item_title', function($price, $_this) {
global $product;
if($product->product_type == 'variable') {
$variation_rrp_price = get_sale_price( $variation_price, $product_id );
$t = get_post_meta(get_the_ID(), $prices_array['_sale_price'], $variation_price); var_dump($t);
if ( !empty ($t) ) {
echo '<span class="onsale soldout">Sale!</span>';
}
}
});
UPDATE
So I get custom price by this code:
function get_rrp_price( $price, $product_id ) {
$rooms2 = get_post_meta( $product_id, 'rooms2', true );
if ( '' === $rooms2) {
$rooms2 = 1;
}
$kurs = 1;
$kurs2 = 10;
$kurs3 = 100;
switch ( $rooms2 ) {
case 1:
$rrp_price = $price * $kurs2;
break;
case 2:
$rrp_price = $price * $kurs3;
break;
default:
$rrp_price = $price * $kurs;
break;
}
return $rrp_price;
}
function filter_woocommerce_get_price( $price, $_this ) {
$product_id = $_this->id;
$rrp_price = get_rrp_price( $price, $product_id );
update_post_meta( $product_id, 'rrp_price', $rrp_price );
return $rrp_price;
}
function filter_736700_woocommerce_product_variation_get_price( $price, $_this) {
if ( 'product_variation' === $_this->post_type ) {
$data = (object) $_this->get_data();
$variation_price = $data->price;
$product_id = $data->parent_id;
$variation_rrp_price = get_rrp_price( $variation_price, $product_id );
$price = $variation_rrp_price;
}
return $price;
}
add_filter( 'woocommerce_product_variation_get_price', 'filter_736700_woocommerce_product_variation_get_price', 10, 2);
function filter_736700_woocommerce_variation_prices( $prices_array, $product, $include_taxes ) {
$product_id = $product->id;
foreach ( $prices_array['price'] as $key => $price ) {
$prices_array['price'][ $key ] = get_rrp_price( $price, $product_id );
}
foreach ( $prices_array['regular_price'] as $key => $price ) {
$prices_array['price'][ $key ] = get_rrp_price( $price, $product_id );
}
foreach ( $prices_array['sale_price'] as $key => $price ) {
$prices_array['price'][ $key ] = get_rrp_price( $price, $product_id );
}
return $prices_array;
}
add_filter( 'woocommerce_variation_prices', 'filter_736700_woocommerce_variation_prices', 10, 3 );
function filter_738363_woocommerce_product_variation_get_regular_price( $price, $_this ) {
if ( 'product_variation' === $_this->post_type ) {
$data = (object) $_this->get_data();
$variation_price = $data->regular_price;
$product_id = $data->parent_id;
$variation_rrp_price = get_rrp_price( $variation_price, $product_id );
update_post_meta( $product_id, $data->name . ' - regular' , $variation_rrp_price );
$price = $variation_rrp_price;
}
return $price;
}
add_filter( 'woocommerce_product_variation_get_regular_price', 'filter_738363_woocommerce_product_variation_get_regular_price', 10, 2);
But after this "Sale!" not assigned anymore (only for variable products)