【问题标题】:WooCommerce my-accounts Page - get the current user for orders queryWooCommerce my-accounts Page - 获取当前用户进行订单查询
【发布时间】:2016-12-21 03:57:50
【问题描述】:

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

我该如何解决这个问题?我错过了什么?

这是我正在使用的代码:

$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;

    }

}

【问题讨论】:

  • “不认识上述用户”到底是什么意思?你有错误吗?出乎意料的输出?还有什么?请edit问题包含尽可能多的信息!

标签: php mysql sql wordpress woocommerce


【解决方案1】:

更新 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 的列表。


参考文献:

【讨论】:

  • 您好,感谢您的回答,但没有显示任何结果。
  • @PatrickJosephAragones 一年后,它起作用了!!!,但为时已晚 :) ... 我只是想找到解决方案,所以现在完成了。答案是在wp_postmeta 表中而不是wp_posts 表中查找客户ID。回头见……
猜你喜欢
  • 2017-10-11
  • 2017-07-02
  • 2020-05-08
  • 1970-01-01
  • 2022-01-14
  • 2018-03-16
  • 2019-09-07
  • 1970-01-01
相关资源
最近更新 更多