我真的找不到类似的问题,所以就在这里(提前为长度道歉):
我们使用 Woocommerce Bookings 插件 让客户通过 Wordpress 网站进行预订。但是,Woocommerce 中的提醒电子邮件始终设置为 1 天,并且无法(轻松)更改。由于 Woocommerce 没有提供更改提醒天数的简单方法,因此我们决定尝试使用 cron 事件(重新)安排提醒。
因此,使用下面的代码,我们尝试提前 2 天而不是 1 天为每个新预订安排提醒:
add_action('woocommerce_booking_confirmed', 'onReservationConfirmed', 2, 2);
add_action('woocommerce_booking_paid', 'onReservationConfirmed', 1, 2);
function onReservationConfirmed($reservationId, $reservation)
{
error_log('booking paid / confirmed');
// get_current_reminder_days() gets the saved value from the db
$days_before_reminder_is_sent = get_current_reminder_days();
// calculate time when reminder should be scheduled based on when the event starts
$timezone_addition = -wc_booking_timezone_offset();
$event_start = $reservation->all_day ? strtotime( 'midnight', $reservation->start ) : $reservation->start;
$scheduled_time = $timezone_addition + strtotime( '-' . absint( apply_filters( 'woocommerce_bookings_remind_before_days', $days_before_reminder_is_sent ) ) . ' day', $event_start );
// check if a cron event for this reminder already exists and if so uneschedule it
$next_event_timestamp = wp_next_scheduled( 'wc-booking-reminder', array($reservationId ));
if ( $next_event_timestamp ) {
error_log('exists' . $next_event_timestamp);
wp_unschedule_event($next_event_timestamp, 'wc-booking-reminder', array($reservationId), true);
}
// schedule reminder at desired time
wp_schedule_single_event( $scheduled_time , 'wc-booking-reminder', array( $reservationId ) );
}
现在,该事件肯定会触发,但是:
现在有趣的是:
,这会取消一个新安排的事件具有相同的 $args。 但话又说回来,在第一种情况下,它是否会变成已付款状态?
我假设 WP 代码中的某个地方有其他东西触发了这个初始事件的调度,但我真的不知道如何解决这个问题或测试它。 有人可以帮忙吗?我们的代码有问题吗?我误读了文档吗?我需要以某种方式以不同的方式调用这些函数吗?
如有任何建议,我们将不胜感激!
有一种非常简单的方法可以更改 Woo Bookings 的提醒发送日期。这段小代码就可以解决问题:
尝试一下!