php - WooCommerce 我的账户页面 - 获取订单查询的当前用户

标签 php mysql sql wordpress woocommerce

我正在尝试对每个用户的特定项目求和,但它似乎无法识别当前用户并且它对所有客户的所有订单求和。

我该如何解决这个问题?我缺少什么?

这是我使用的代码:

$order_items = apply_filters( 'woocommerce_reports_top_earners_order_items', $wpdb->get_results( "

SELECT order_item_meta_2.meta_value as product_id, SUM( order_item_meta.meta_value ) as line_total FROM {$wpdb->prefix}woocommerce_order_items as order_items

LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id

LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta_2 ON order_items.order_item_id = order_item_meta_2.order_item_id

LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID

WHERE posts.post_type = 'shop_order'

AND posts.post_status IN ( '" . implode( "','", array( 'wc-completed', 'wc-processing', 'wc-on-hold' ) ) . "' )

AND order_items.order_item_type = 'line_item'

AND order_item_meta.meta_key = '_line_total'

AND order_item_meta_2.meta_key = '_product_id'

GROUP BY order_item_meta_2.meta_value

" ));
$totalPR = 0;
$Products = array(1507, 1406, 1506);

foreach ($order_items as $item) {

 if (in_array($item->product_id, $Products)) {

        $totalPR = $item->line_total + $totalPR;
         echo $totalPR;

    }

}

最佳答案

更新 2 - 正在制作:

  1. 获取客户名单
  2. 在 foreach 循环中遍历每个客户
  3. 获取客户 ID
  4. 为 post_id 上的 wp_postmeta 表添加一个 LEFT JOIN:

    LEFT JOIN {$wpdb->postmeta} AS postmeta ON order_items.order_id = postmeta.post_id
    
  5. 将这两行插入到您的 WHERE 中:

    AND postmeta.meta_key = '_customer_user'
    
    AND postmeta.meta_value = '$customer_id'
    
  6. 然后是客户循环中的循环,以获取客户的总和

这是代码:

global $wpdb;

// Set here your product ids
$products = array( 1507, 1406, 1506 );
$all_customers = get_users( 'role=customer' );

foreach ( $all_customers as $customer ) {
    $customer_id = $customer->ID;
    $total_pr = 0;

    $query = $wpdb->get_results("

        SELECT order_item_meta_2.meta_value as product_id,

        SUM( order_item_meta.meta_value ) as line_total

        FROM {$wpdb->prefix}woocommerce_order_items as order_items

        LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id

        LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta_2 ON order_items.order_item_id = order_item_meta_2.order_item_id

        LEFT JOIN {$wpdb->postmeta} AS postmeta ON order_items.order_id = postmeta.post_id

        LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID

        WHERE posts.post_type = 'shop_order'

        AND posts.post_status IN ( '" . implode( "','", array( 'wc-completed', 'wc-processing', 'wc-on-hold' ) ) . "' )

        AND postmeta.meta_key = '_customer_user'

        AND postmeta.meta_value = '$customer_id'

        AND order_items.order_item_type = 'line_item'

        AND order_item_meta.meta_key = '_line_total'

        AND order_item_meta_2.meta_key = '_product_id'

        GROUP BY order_item_meta_2.meta_value

    ");

    $results = apply_filters( 'woocommerce_reports_top_earners_order_items', $query );

    foreach ( $results as $values ) {
         if ( in_array( $values->product_id, $products ) ) {
             $total_pr += $values->line_total;
        }
    }
    echo 'customer ID: ' . $customer->ID . ' | Total PR: ' . number_format( $total_pr, 2 ) . '<br>';
}

经过测试并有效。它将输出包含 Customer IDs 和相应的 Total PR 的列表。


引用资料:

关于php - WooCommerce 我的账户页面 - 获取订单查询的当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38946718/

相关文章:

sql - 在 SQL 中将数据从宽格式转换为长格式

sql - 从 SQL Server 下载图像

MySQL - GREATEST() 和 LEFT JOIN 返回 NULL 的问题

php、mysql选择

php - 仅将更改的值更新到数据库

php - 大文件 uploader

php - mysql查询和php

php - 如何使用多个 if 语句更新表

MySQL 复制 : Preventing master server from replicating table inserts

javascript - 使用 php/javascript 在 mysql 数据库的谷歌地图上显示标记