Woocommerce 热卖产品不起作用
// 重置所有产品的销量统计
function reset_product_sales_counts() {
global $wpdb;
// 将所有产品的销量统计清零
$wpdb->query( "UPDATE {$wpdb->postmeta} SET meta_value = 0 WHERE meta_key = 'total_sales'" );
// 重新计算每个产品的销量
$orders = get_posts( array(
'post_type' => 'shop_order',
'post_status' => array( 'wc-completed', 'wc-processing' ),
'posts_per_page' => -1,
) );
$processed_orders = 0;
$failed_orders = array();
foreach ( $orders as $order_post ) {
$order = wc_get_order( $order_post->ID );
// 检查订单是否有效
if ( ! $order || ! is_a( $order, 'WC_Order' ) ) {
$failed_orders[] = $order_post->ID;
continue; // 跳过无效订单
}
foreach ( $order->get_items() as $item ) {
$product_id = $item->get_product_id();
$qty = $item->get_quantity();
// 更新产品销量
$current_sales = get_post_meta( $product_id, 'total_sales', true );
$new_sales = (int) $current_sales + $qty;
update_post_meta( $product_id, 'total_sales', $new_sales );
}
$processed_orders++;
}
// 输出执行结果
$output = '产品销量统计已重置并重新计算。<br>';
$output .= "成功处理订单: {$processed_orders}<br>";
if ( ! empty( $failed_orders ) ) {
$output .= "失败订单数量: " . count( $failed_orders ) . "<br>";
$output .= "失败订单ID: " . implode( ', ', $failed_orders );
}
echo $output;
}
// 执行函数(注意:此操作会影响数据库,请先备份)
// reset_product_sales_counts();
// 访问特定 URL 时执行函数,例如:your-site.com/?reset_sales=true
if ( isset( $_GET['reset_sales'] ) && $_GET['reset_sales'] === 'true' ) {
reset_product_sales_counts();
}