Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to display woocommerce sale price or regular price if there is no sale price

I'm using a woocommerce product addons plugin where I would like to display the price of a product in my dropdown section of the addons. Currently the code I have is this

    <?php
$loop = 0;
$current_value = isset( $_POST['addon-' . sanitize_title( $addon['field-name'] ) ] ) ? wc_clean( $_POST[ 'addon-' . sanitize_title( $addon['field-name'] ) ] ) : '';
global $product;
?>
<p class="form-row form-row-wide addon-wrap-<?php echo sanitize_title( $addon['field-name'] ); ?>">
    <select class="addon addon-select" name="addon-<?php echo sanitize_title( $addon['field-name'] ); ?>">

        <?php if ( ! isset( $addon['required'] ) ) : ?>
            <option value=""><?php _e('None', 'woocommerce-product-addons'); ?></option>
        <?php else : ?>
            <!--<option value=""><?php _e('Select an option...', 'woocommerce-product-addons'); ?></option>-->
        <?php endif; ?>

        <?php foreach ( $addon['options'] as $i => $option ) :
            $loop ++;
            $price = apply_filters( 'woocommerce_product_addons_option_price',
                $option['price'] > 0 ? ' + ' . wc_price( get_product_addon_price_for_display( $option['price'] ) ) . '' : '',
                $option,
                $i,
                'select'
            );
            ?>
            <option data-raw-price="<?php echo esc_attr( $option['price'] ); ?>" data-price="<?php echo get_product_addon_price_for_display( $option['price'] ); ?>" value="<?php echo sanitize_title( $option['label'] ) . '-' . $loop; ?>" <?php selected( $current_value, sanitize_title( $option['label'] ) . '-' . $loop ); ?>><?php echo wptexturize( $option['label'] . ' (' ); echo balanceTags($product->get_price_html()) . $price ?>)</option>
        <?php endforeach; ?>

    </select>
</p>

I'm using this echo

$product->get_price_html()

what this does though is display the $"sale price" $"price" but I just want to display just the sale price or just the product price if there is no sale price. Looking at the code below, how would I accomplish this?

like image 581
JPWeb Avatar asked May 14 '17 10:05

JPWeb


People also ask

How do I get the regular price of a WooCommerce product?

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: If the product has variations you will get nothing if you will use the code above.

How to display all products from a specific category in WooCommerce?

Open Admin panel and go to WooCommerce > Catalog > Products, then select a specific category and press Filter: Tick the check box to select all products listed on this page. If the products from the selected category are displayed on several pages, set up pagination in Screen Options to display all products from the category within one page.

How to offer discounts on seasonal items in WooCommerce?

For instance, if you run a clothing store, you may want to offer discounts on seasonal items: t-shirts, shorts, dresses, etc. You can accomplish this using the default WooCommerce functionality too. Open Admin panel and go to WooCommerce > Catalog > Products, then select a specific category and press Filter:

Why do you use cookies in WooCommerce?

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance. WooCommerce pricing display is an important area of the product page. Customers check out the prices and carry out price and product comparisons before buying the products.


2 Answers

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;
                }
like image 122
Mike Avatar answered Sep 21 '22 12:09

Mike


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.

like image 43
CodeMascot Avatar answered Sep 19 '22 12:09

CodeMascot