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

Php WooCommerce我的帐户页面-获取订单查询的当前用户,php,mysql,sql,wordpress,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_m

我试图为每个用户计算特定项目的总和,但它似乎不识别当前用户,而是为所有客户计算所有订单的总和

我怎样才能解决这个问题?我错过了什么

以下是我正在使用的代码:

$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-它正在努力实现以下目标:

  • 获取客户名单
  • 在foreach循环中检查每个客户
  • 获取客户ID
  • 在post\U id上为wp\U POSTETA表添加左联接:

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

    AND postmeta.meta_key = '_customer_user'
    
    AND postmeta.meta_value = '$customer_id'
    
  • 然后,您的循环进入customers循环,以按customer获得总和

  • 这是代码:

    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>';
    }
    
    global$wpdb;
    //在此处设置您的产品ID
    $products=阵列(150714061506);
    $all_customers=get_用户('role=customer');
    foreach($customer作为$customer的所有客户){
    $customer\u id=$customer->id;
    $total_pr=0;
    $query=$wpdb->get_结果(“
    选择订单\项目\元\ 2.元\值作为产品\ id,
    合计(订单项目元值)为行合计
    从{$wpdb->prefix}woocommerce\u order\u项目作为order\u项目
    左联接{$wpdb->prefix}woocommerce\u order\u itemmeta作为order\u item\u meta在order\u items.order\u item\u id=order\u item\u meta.order\u item\u id
    左联接{$wpdb->prefix}woocmerce\u order\u itemmeta作为order\u item\u meta\u 2在order\u items.order\u item\u id=order\u item\u meta\u 2.order\u item\u id
    左连接{$wpdb->postmeta}作为订单\项目的postmeta.order\ id=postmeta.post\ id
    左连接{$wpdb->posts}作为order_项目上的POST。order_id=posts.id
    其中posts.post\u type='shop\u order'
    和posts.post_状态在(“.”。内爆(“,”),数组('wc completed','wc processing','wc on hold'))。“)
    和postETA.meta_key=''u customer\u user'
    和postETA.meta_值=“$customer_id”
    和订单项目。订单项目类型='行项目'
    和订单项目meta.meta键=''u行\u总计'
    和order_item_meta_2.meta_key=''u product_id'
    按订单分组\u项目\u元\u 2.元\u值
    ");
    $results=apply_filters('woocommerce_reports_top_newers_order_items',$query);
    foreach($结果为$值){
    if(在数组中($values->product\u id,$products)){
    $total\u pr+=$values->line\u total;
    }
    }
    回显“客户ID:”.$customer->ID.“|总请购单:”.编号格式($Total\u请购单,2)。”
    ; }
    经过测试并正常工作。它将输出带有
    客户ID的列表以及相应的
    总PR


    参考资料:


    你说的“不认识上述用户”到底是什么意思?你有错误吗?意外输出?还有别的吗?请在问题中包含尽可能多的信息!嗨,谢谢你的回答,但它没有显示任何结果,伙计。@PatrickJosephAragones在一年之后,它工作了!!!但是现在已经太晚了:)…我只是想找到解决方案,所以现在就完成了。答案是在
    wp_postETA
    表中查找客户ID,而不是在
    wp_posts
    表中查找。回头见…