根据订单商品数量向 WooCommerce 订单添加到期日期

时间:2021-03-23 11:29:28

标签: php wordpress date woocommerce orders

我正在尝试为我的 WooCommerce 商店设置到期日期功能。

我需要的是一个自动系统,它可以为订单设置到期日期。 1 个产品的有效期为 15 天,如果您订购 2 个产品,则为 30 天,依此类推。基本上,expiration_days = order_quantity * 15,并在订单数据中设置日期。

然后,我需要从 WooCommerce 面板的订单列表中删除过期的订单。

我见过使用钩子的类似解决方案,但我不知道如何将到期日期设置为元数据。我被困在这里:

add_action( 'woocommerce_checkout_create_order', 'add_expiration' );
function add_expiration( $order ) {

    // Calculate expiration date. 
    // I know how to work with dates, but I haven't found how to get quantity from the order to do the multiply.

    $order->update_meta_data('expiration_date', $expiration_date);
}

然后我只需要一个系统来检查当前日期是否小于到期日期。不知道我是否也可以使用 functions.php 每天触发一次检查功能,或者我需要另一种方法。

// Daily trigger
function delete_expired( ) {

    // for each order
        // if order.expiration_date > current_date
            // wp_delete_post(order);
}

希望我解释得很好。

1 个答案:

答案 0 :(得分:2)

您仍然可以获取购物车商品数量,以便进行计算并设置到期日期:

add_action( 'woocommerce_checkout_create_order', 'add_expiration' );
function add_expiration( $order, $data ) {
    $items_count  = WC()->cart->get_cart_contents_count();

    $order->update_meta_data('expiration_date', date( 'Y-m-d H:i:s', strtotime( '+'. ( $items_count * 15 ) .' days' ) ) );
}

代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。


现在您可以使用 Action Scheduler 插件,根据到期日期制作作业队列。

Action Scheduler 是一个用于后台处理的可扩展、可追踪的作业队列...
请注意,WooCommerceWooCommerce 订阅 包含/使用了 Action Scheduler library
文档(和示例用法)位于 ActionScheduler.org

Action Scheduler 比 WordPress Cron 更简单、高效和可扩展。

注意 StackOverFlow 中的规则是当时的一个问题。