我需要设置 Woocommerce 自动清理超过 3 个月的已完成订单,并发现 如何在 Woocommerce 中自动删除旧的已完成订单 答案代码,该代码在激活 HPOS 的情况下不起作用。我添加了一些调试语句并为每个订单 ID 获取
Error deleting order ID:
。知道如何解决吗?
add_action( 'admin_footer', 'auto_trash_old_completed_orders_345erhwe546' );
function auto_trash_old_completed_orders_345erhwe546() {
global $nm_theme_options;
if ( isset( $nm_theme_options['delete_all_woo_orders_older_then_3_months'] ) && $nm_theme_options['delete_all_woo_orders_older_then_3_months'] == 1 ) {
// Theme option is set to delete old orders
$completed_order_ids = wc_get_orders( array(
'limit' => 100, // By batch of 100 orders
'status' => 'completed',
'return' => 'ids',
'date_created' => '<' . date( 'Y-m-d', strtotime( '-3 months' ) ),
) );
if ( count( $completed_order_ids ) > 0 ) {
// Orders found, proceed to delete
foreach ( $completed_order_ids as $completed_order_id ) {
$trashed = wp_trash_post( $completed_order_id );
$deleted = wp_delete_post( $completed_order_id, true );
// DEBUG
if ( ! $trashed || ! $deleted ) {
echo '<script>alert("Error deleting order ID: ' . $completed_order_id . '");</script>';
}
}
}
// DEBUG
echo '<script>alert("Orders deleted: ' . count( $completed_order_ids ) . '");</script>';
} else {
// DEBUG
echo '<script>alert("Theme option not set to delete old orders.");</script>';
}
}
启用高性能订单存储 (HPOS) 时,不应使用经典的 WordPress 帖子和帖子元功能。相反,您可以使用
WC_Data
delete()
方法,例如:
add_action( 'admin_footer', 'auto_trash_old_completed_orders' );
function auto_trash_old_completed_orders(){
$completed_orders = wc_get_orders( array(
'limit' => 100, // By batch of 100 orders
'status' => 'completed',
'date_created' => '<' . date("Y-m-d", strtotime("-6 months")),
) );
if ( count($completed_orders) > 0 ){
foreach( $completed_orders as $completed_order ) {
$completed_order->delete(true);
}
}
}
代码位于子主题的functions.php 文件中(或插件中)。应该可以。
请注意,我已经减少了要处理的订单数量……这个“限制”参数应该根据托管进行微调。