我正在尝试为我的 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);
}
希望我解释得很好。
答案 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 是一个用于后台处理的可扩展、可追踪的作业队列...
请注意,WooCommerce 和 WooCommerce 订阅 包含/使用了 Action Scheduler library。
文档(和示例用法)位于 ActionScheduler.org
Action Scheduler 比 WordPress Cron 更简单、高效和可扩展。
注意 StackOverFlow 中的规则是当时的一个问题。