使用 SQL 查询获取所有 WooCommerce 客户的已付款订单
Get all WooCommerce customers paid orders with a SQL query
我需要一个查询 returns 我所有订单已获批准的用户。
我很难找到它在数据库中的存储位置。我只找到 post_status 'wc-complete',但我认为这不是正确的信息。
SELECT a.post_status, b.meta_value FROM wp_posts a, wp_postmeta b
WHERE a.ID = b.post_id
AND a.post_type = 'shop_order'
AND a.post_status = 'wc-completed'
Using "completed" order status for paid orders is correct
这是一个带有 SQL 查询的自定义函数,它将输出格式化的用户 ID 数组及其已完成的订单(已付款/已接受):
function completed_orders_ids_by_costumer_id(){
global $wpdb;
$query = $wpdb->get_results("
SELECT pm.meta_value AS user_id, pm.post_id AS order_id
FROM {$wpdb->prefix}postmeta AS pm
LEFT JOIN {$wpdb->prefix}posts AS p
ON pm.post_id = p.ID
WHERE p.post_type = 'shop_order'
AND p.post_status = 'wc-completed'
AND pm.meta_key = '_customer_user'
ORDER BY pm.meta_value ASC, pm.post_id DESC
");
// We format the array by user ID
foreach($query as $result)
$results[$result->user_id][] = $result->order_id;
return $results;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并有效。
示例用法 仅用于测试以查看原始输出数据
echo '<pre>'; print_r(completed_orders_ids_by_costumer_id()); echo '</pre>';
你会得到类似的东西:
Array
(
[9] => Array
(
[0] => 505
[0] => 497
)
[12] => Array
(
[0] => 626
[1] => 584
[2] => 483
)
[15] => Array
(
[0] => 614
[1] => 598
)
[17] => Array
(
[0] => 634
)
… / … and so on …
)
Now in wp_postmeta
table you will also some other meta keys related to paid orders that you could use:
• '_paid_date'
• '_date_paid'
• '_date_completed'
• '_completed_date'
But targeting "completed" order status is just fine
使用其他人列出的元键,您可以使您的 SQL 查询 (可以替换我们在函数中的第一个查询):
$query = $wpdb->get_results("
SELECT DISTINCT pm.meta_value AS user_id, pm.post_id AS order_id
FROM {$wpdb->prefix}postmeta AS pm
LEFT JOIN {$wpdb->prefix}posts AS p
ON pm.post_id = p.ID
LEFT JOIN {$wpdb->prefix}postmeta AS pm2
ON p.ID = pm2.post_id
WHERE p.post_type = 'shop_order'
AND pm.meta_key = '_customer_user'
AND pm2.meta_key IN ( '_paid_date', '_paid_date', '_date_completed', '_completed_date' )
AND pm2.meta_value != ''
ORDER BY pm.meta_value ASC, pm.post_id DESC
");
已经过测试,也可以正常工作……
我需要一个查询 returns 我所有订单已获批准的用户。
我很难找到它在数据库中的存储位置。我只找到 post_status 'wc-complete',但我认为这不是正确的信息。
SELECT a.post_status, b.meta_value FROM wp_posts a, wp_postmeta b
WHERE a.ID = b.post_id
AND a.post_type = 'shop_order'
AND a.post_status = 'wc-completed'
Using "completed" order status for paid orders is correct
这是一个带有 SQL 查询的自定义函数,它将输出格式化的用户 ID 数组及其已完成的订单(已付款/已接受):
function completed_orders_ids_by_costumer_id(){
global $wpdb;
$query = $wpdb->get_results("
SELECT pm.meta_value AS user_id, pm.post_id AS order_id
FROM {$wpdb->prefix}postmeta AS pm
LEFT JOIN {$wpdb->prefix}posts AS p
ON pm.post_id = p.ID
WHERE p.post_type = 'shop_order'
AND p.post_status = 'wc-completed'
AND pm.meta_key = '_customer_user'
ORDER BY pm.meta_value ASC, pm.post_id DESC
");
// We format the array by user ID
foreach($query as $result)
$results[$result->user_id][] = $result->order_id;
return $results;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
已测试并有效。
示例用法 仅用于测试以查看原始输出数据
echo '<pre>'; print_r(completed_orders_ids_by_costumer_id()); echo '</pre>';
你会得到类似的东西:
Array
(
[9] => Array
(
[0] => 505
[0] => 497
)
[12] => Array
(
[0] => 626
[1] => 584
[2] => 483
)
[15] => Array
(
[0] => 614
[1] => 598
)
[17] => Array
(
[0] => 634
)
… / … and so on …
)
Now in
wp_postmeta
table you will also some other meta keys related to paid orders that you could use:
•'_paid_date'
•'_date_paid'
•'_date_completed'
•'_completed_date'
But targeting "completed" order status is just fine
使用其他人列出的元键,您可以使您的 SQL 查询 (可以替换我们在函数中的第一个查询):
$query = $wpdb->get_results("
SELECT DISTINCT pm.meta_value AS user_id, pm.post_id AS order_id
FROM {$wpdb->prefix}postmeta AS pm
LEFT JOIN {$wpdb->prefix}posts AS p
ON pm.post_id = p.ID
LEFT JOIN {$wpdb->prefix}postmeta AS pm2
ON p.ID = pm2.post_id
WHERE p.post_type = 'shop_order'
AND pm.meta_key = '_customer_user'
AND pm2.meta_key IN ( '_paid_date', '_paid_date', '_date_completed', '_completed_date' )
AND pm2.meta_value != ''
ORDER BY pm.meta_value ASC, pm.post_id DESC
");
已经过测试,也可以正常工作……