How to display woocommerce sale price or regular price if there is no sale price
This article worked for me. you can also try this one.
If you want to get the regular price or sale price of a woocommerce product and you are getting nothing you need to know the following:
If the product has no variations you can get the regular price and sales price just like that:
Get the price of a simple procut
<?php
#the product must be instantiated above like $product = new WC_Product();
echo $product->regular_price;
echo $product->sale_price;
?>
If the product has variations you will get nothing if you will use the code above.
You need to get the variation product prices.
Get the price of a product with variations
#1 Get product variations
$product_variations = $product->get_available_variations();
#2 Get one variation id of a product
$variation_product_id = $product_variations [0]['variation_id'];
#3 Create the product object
$variation_product = new WC_Product_Variation( $variation_product_id );
#4 Use the variation product object to get the variation prices
echo $variation_product ->regular_price;
echo $variation_product ->sale_price;
That should be all.
Enjoy.
Source: http://www.w3bdeveloper.com/how-to/how-to-get-regular-price-of-a-product-in-wordpress-woocommerce/
That's what works for me with Wordpress 5.1 and WooCommerce 3.5.5 :
$price = get_post_meta( get_the_ID(), '_regular_price', true);
$price_sale = get_post_meta( get_the_ID(), '_sale_price', true);
if ($price_sale !== "") {
echo $price_sale;
} else {
echo $price;
}
Pretty simple. We'll write a custom function that will first be sure on that if the product is on sale or not. Then it'll return regular or sale price based on the sale condition it defined previously. So the function will be:
/**
* Returns product price based on sales.
*
* @return string
*/
function the_dramatist_price_show() {
global $product;
if( $product->is_on_sale() ) {
return $product->get_sale_price();
}
return $product->get_regular_price();
}
Now call this function the_dramatist_price_show()
instead of $product->get_price_html()
. You'll get the price based on is on sale or not without currency symbol.
Hope that helps.