使用Woocommerce预订中的过滤器挂钩更改持续时间

时间:2018-04-23 08:26:10

标签: php wordpress woocommerce duration woocommerce-bookings

woocommerce_booking_form_get_posted_data如何解决问题以及如何使用它来更改每个产品已经在购物车中的预订时长?无法在互联网上找到有关它的任何信息。

你可以在这个钩子上进行持续时间重新计算吗?什么时候被解雇?更改此挂钩的持续时间是否会重新计算购物车中的产品价格以及继续订购后的价格? 任何有关它的信息将不胜感激!

1 个答案:

答案 0 :(得分:2)

以下示例将向您展示如何使用woocommerce_booking_form_get_posted_data过滤器钩子在Woocommerce预订中更改持续时间:

add_filter( 'woocommerce_booking_form_get_posted_data', 'filter_booking_form_get_posted_data', 10, 3 );
function filter_booking_form_get_posted_data( $posted_data, $product, $duration_length ) {

    ## --- Settings :: New duration --- ##

    $new_start_date ='2018-05-08 00:00:00'; // new start date
    $new_duration = 6; // new duration
    $duration_unit = __('day', 'woocommerce'); // (if needed)

    ## --- Calculations and changes --- ##

    $day_time = 86400;
    $new_start_time = strtotime($new_start_date);
    $new_end_time   = $new_start_time + ( $day_time * $new_duration ) - 1;

    $posted_data['_year']       = date('Y', $new_start_time);
    $posted_data['_month']      = date('n', $new_start_time);
    $posted_data['_day']        = date('j', $new_start_time);

    $posted_data['_date']       = date('Y-n-j', $new_start_time);
    $posted_data['date']        = date('M j, Y', $new_start_time);

    $posted_data['_start_date'] = $new_start_time;
    $posted_data['_end_date']   = $new_end_time;

    $posted_data['_duration']   = $new_duration;
    $posted_data['duration']   = sprintf( _n( '%s day', '%s days', $new_duration, 'woocommerce' ), $new_duration );

    return $posted_data;
}

代码进入活动子主题(或活动主题)的function.php文件。经过测试和工作。

  

但它不会改变价格,因为这需要以另一种方式和另一种方式进行。