Search code examples
phpwordpressdatewoocommerce

Text after sale price showing FROM and TO dates in Woocommerce


I am using Customs product price on sale displayed with date limit in Woocommerce 3+ to make a custom formatted price display on products on sale that have a limitation period.

Now I am trying to include also the "from" date. How can I get and include the from date in this code?

Any track is really useful and appreciated.


Solution

  • The following code will handle both on sale date from and on sale date to in your price custom display (require both from and to dates):

    add_filter( 'woocommerce_get_price_html', 'custom_price_html', 100, 2 );
    function custom_price_html( $price, $product ){
        if ( is_product() ) {
            // Simple products and variations
            if( $product->is_type( 'simple' ) || $product->is_type( 'variation' )  )
            {
                $sales_price_from = $product->get_date_on_sale_from();
                $sales_price_to = $product->get_date_on_sale_to();
                if( ! empty($sales_price_from) && ! empty($sales_price_to) ){
                    $replacement = ' </ins> <span class="notice-price">(on offer from ' . date( 'j.M.Y', $sales_price_from->getTimestamp() ) . ' until ';
                    return str_replace( '</ins>', $replacement . date( 'j.M.Y', $sales_price_to->getTimestamp() ) . ')</span>', $price );
                }
            }
            // Variable products
            else if ( $product->is_type( 'variable' ) )
            {
                $from = $to = '';
                // Loop through variations
                foreach ( $product->get_children() as $key => $variation_id ) {
                    $variation        = wc_get_product($variation_id);
                    $sales_price_from = $variation->get_date_on_sale_from();
                    $sales_price_to   = $variation->get_date_on_sale_to();
    
                    if( ! empty($sales_price_from) && ! empty($sales_price_to) ){
                        $date_from = date( 'j.M.Y', $sales_price_from->getTimestamp() );
                        $date_to   = date( 'j.M.Y', $sales_price_to->getTimestamp() );
                        $class     = $key == 0 ? 'class="active"' : '';
                        $from     .= '<i data-id="'.$variation_id.'" data-order="'.($key + 1).'" '.$class.'>'. $date_from .'</i>';
                        $to       .= '<i data-id="'.$variation_id.'" data-order="'.($key + 1).'" '.$class.'>'. $date_to .'</i>';
                    }
                }
                if( ! empty($content) ){
                    return $price . ' <span class="notice-price">(on offer from ' . $from . ' until ' . $to .')</span>';
                }
            }
        }
        return $price;
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and works.