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

Add an expiration date to WooCommerce orders based on order items count

我正在尝试为我的 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);
}

希望我解释得很好。

您仍然可以获得购物车商品数量,这将允许您进行计算并设置到期日期:

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 是用于后台处理的可扩展、可跟踪的作业队列……
请注意 Action Scheduler libraryWooCommerceWooCommerce Subscriptions.
包含/使用 文档(和示例用法)位于 ActionScheduler.org

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

注意当时Whosebug中的规则是一道题