Моя текущая функция успешно запрашивает все продажи, сделанные на моем веб-сайте. Но я не уверен, как ограничить сумму только для текущего пользователя, который входит в систему. Я имею в виду общее количество купленных ими товаров. Они смогут увидеть общую сумму покупок. Текущий код ниже будет отображать общую сумму продаж, сделанных в этот конкретный день.
Мой код
function get_daily_purchases_total(){
global $wpdb;
return $wpdb->get_var( "
SELECT DISTINCT SUM(pm.meta_value)
FROM {$wpdb->prefix}posts as p
INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type LIKE 'shop_order'
AND p.post_status IN ('wc-processing','wc-completed', 'wc-on-hold')
AND DATE(p.post_date) >= CURDATE()
AND pm.meta_key LIKE '_order_total'
" );
}
Сама WooCommerce имеет встроенную функцию wc_get_customer_total_spent(), где user_id — параметр, но согласно вашему требованию я немного изменил запрос, который используется WooCommerce.
function so_55556214_get_orders_from_user_id() {
$user_id = get_current_user_id();
if ($user_id > 0) {
//run only for members
$statuses = array('completed', 'processing', 'on-hold');
global $wpdb;
$result = $wpdb->get_var("SELECT SUM(meta2.meta_value)
FROM $wpdb->posts as posts
LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id
LEFT JOIN {$wpdb->postmeta} AS meta2 ON posts.ID = meta2.post_id
WHERE meta.meta_key = '_customer_user'
AND meta.meta_value = '" . esc_sql($user_id) . "'
AND posts.post_type = 'shop_order'
AND posts.post_status IN ( 'wc-" . implode("','wc-", $statuses) . "' )
AND meta2.meta_key = '_order_total'
AND DATE(posts.post_date) >= CURDATE() ");
return $result;
}
}
Я протестировал приведенный выше код на своей стороне, и, похоже, он работает нормально. Надеюсь, поможет :-)