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

Solution:1

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);
        }
    } 
}