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