Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

151
Views
Set WooCommerce Price based on Custom Field and Custom Date (Not Working)

I am working on a reversed "sale price" as in "Future Price" for single products in WooCommerce.

The general idea is to set a price (future price) and a start + end date. Then, using the woocommerce_product_get_price filter, check if today is the same as the value of "future price start date" and if they are the same, change the product price.

When the future price end date has passed, restore the product price into whatever the regular price is.

Problem is: I am not getting any errors or notices or anything like that -- which means I am lost :)

To accomplish this whole thing, I have created a custom field (future price). I've also created the date fields. They are all saved and updated.

If anyone can help and give me tips / pointers, I would really appreciate it. This is my second (2 out of 3) school projects due within a week.

This is my code in full:

add_filter( 'woocommerce_product_get_price', 'future_product_price', 20, 2 );
function future_product_price( $price, $product ) {

    if ( is_admin() ) return $price;

    $future_price       = get_post_meta( $product->get_id(), 'future_price', true ); // future product price
    $future_start_date  = get_post_meta( $product->get_id(), '_future_price_date_from', true ); // future product price start date
    $future_end_date    = get_post_meta( $product->get_id(), '_future_price_date_to', true ); // future product price end date

    if ( ! empty( $future_price ) && ! empty( $future_start_date ) && ! empty( $future_end_date ) ) {

        $future_date_time   = (int) strtotime( $future_start_date ); // convert
        $now_time           = (int) strtotime("now"); // now in seconds

        // check if right now is the same day as the future price start date
        if ( $now_time == $future_start_date )

            // if they are the same, set the product price to the future price
            $price = $future_price;
    }

    return $price;
}
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

change "add_filter woocommerce_product_get_price" to "woocommerce_get_price_html" for display fuctre price and few small change in your future_product_price function :

add_filter( 'woocommerce_get_price_html', 'future_product_price', 20, 2 );
function future_product_price( $price, $product ) {

    if ( is_admin() ) return $price;

    $future_price       = get_post_meta( $product->get_id(), 'future_price', true ); // future product price
    $future_start_date  = get_post_meta( $product->get_id(), '_future_price_date_from', true ); // future product price start date
    $future_end_date    = get_post_meta( $product->get_id(), '_future_price_date_to', true ); // future product price end date

    if ( ! empty( $future_price ) && ! empty( $future_start_date ) && ! empty( $future_end_date ) ) {

        $future_start = (int) strtotime( $future_start_date ); // convert
        $future_end   = (int) strtotime( $future_end_date ); // convert
        $now_time     = (int) strtotime(date('Y-m-d')); // now in seconds
        // check if right now is the same day as the future price start date
        if($future_start <= $now_time && $now_time <= $future_end) {
            // if they are the same, set the product price to the future price
            $price = $future_price;
        }
    }
    return $price;  
}

Add other functions for set future prices in a cart or checkout:

add_action( 'woocommerce_before_calculate_totals', 'set_alter_price_cart', 20, 2 );

function set_alter_price_cart( $cart ) {

if ( is_admin()) return;

    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {

        $product = $cart_item['data'];
        $price = $product->get_price();

        $future_price       = get_post_meta( $product->get_id(), 'future_price', true ); // future product price
        $future_start_date  = get_post_meta( $product->get_id(), '_future_price_date_from', true ); // future product price start date
        $future_end_date    = get_post_meta( $product->get_id(), '_future_price_date_to', true ); // future product price end date

        if ( ! empty( $future_price ) && ! empty( $future_start_date ) && ! empty( $future_end_date ) ) {
            
            $future_start = (int) strtotime( $future_start_date ); // convert
            $future_end   = (int) strtotime( $future_end_date ); // convert
            $now_time     = (int) strtotime(date('Y-m-d')); // now in seconds
            // check if right now is the same day as the future price start date
            if($future_start <= $now_time && $now_time <= $future_end) {
                $price =  $future_price;
            }
            $cart_item['data']->set_price($price);
        }
    } 
}
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!