相关疑难解决方法(0)

将 Woocommerce 订阅更新并同步到自定义日期

我们有一个客户正在运送订阅产品(实际上是包含四到五个产品捆绑包的复合产品),并且他们每周提供送货服务。他们的交货日期始终是星期四。Woocommerce 订阅允许同步到特定日期,因此我们选择了“对齐订阅续订日”选项,并且在给定产品中,我们将每个选项设置为在星期四进行(“每 4 周”、“每第三周”等)

产品同步设置的屏幕截图

我们的情况需要注意的是,前一天(周三)或周四收到的订单无法在该周履行,需要将其开始日期/交货日期推迟到下周四。为此,我们编写了一个functions.php使用woocommerce_subscriptions_product_first_renewal_payment_time钩子的函数:

<?php
function rem_check_renewal_date( $first_renewal_timestamp, $product_id, $from_date_param, $timezone ) {

  if ( date('D') == 'Wed' || date('D') == 'Thu' ) {

    $from_date_param = strtotime('Thursday next week');
    return $from_date_param;

  } else {

    // Nothing needs to be done, because we must be on a Fri thru Tue
    return;

  }

}

add_filter( 'woocommerce_subscriptions_product_first_renewal_payment_time', 'rem_check_renewal_date', 10, 4);
?>
Run Code Online (Sandbox Code Playgroud)

现在我们已经做到了这一点,我们可以看到结账上的一些字段似乎正在正确更新。例如,在下一次付款日期(我们将其更改为下一次交货)下,它正确显示下周而不是今天(在撰写本文时恰好是星期四)。 购物车截图

但并非订阅仪表板中的所有字段/列值都会更改。例如,实际开始日期列显示收到订单的日期。

订阅概述的屏幕截图

您还可以在 Woocommerce 发送的确认电子邮件中看到,开始日期被列为当前日期,但根据我们的挂钩,“下次付款”已移动一周。

电子邮件订单确认截图

当我们在星期三下测试订单时,开始日期列显示星期三。如果它的真正用途是作为“收到订单”日期,这是有道理的,所以我的问题是这样的:

需要更新哪些(如果有)其他列和/或值,以便将前一天收到的订单或交货日移至下周?我们需要确保后续订单保持在 2 周、3 周、4 周的计划内,并与更改后的首次付款日期保持一致。但我不确定仅使用上面的钩子更改第一个付款日期是否足够,并且文档没有详细说明。

php wordpress woocommerce woocommerce-subscriptions

4
推荐指数
1
解决办法
1186
查看次数