Я уже задавала этот вопрос Вот и получил частично рабочий ответ. Но резюмируем из моего предыдущего вопроса. Я запрашиваю продукты woocommerce в пост-запросе, а затем отображаю их в списке лидеров. Мне также нужно отобразить индивидуальную розничную сумму, проданную для каждого продукта. Когда я говорю розничную сумму, я не имею в виду проданное количество, я имею в виду общую проданную сумму в долларах. Теперь у меня есть рабочий код, чтобы распродать всю розничную продажу за весь магазин, что довольно здорово.
// All-time Sales for entire store
$query = array();
$query['fields'] = "SELECT SUM( postmeta.meta_value ) FROM {$wpdb->posts} as posts";
$query['join'] = "INNER JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id ";
$query['where'] = "WHERE posts.post_type IN ( '" . implode( "','", wc_get_order_types( 'reports' ) ) . "' ) ";
$query['where'] .= "AND posts.post_status IN ( 'wc-" . implode( "','wc-", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "' ) ";
$query['where'] .= "AND postmeta.meta_key = '_order_total' ";
$sales = $wpdb->get_var( implode( ' ', $query ) );
Теперь проблема в том, что я не могу заставить это работать для отдельного продукта. На данный момент у меня есть этот код:
$product_id = 10;
$query = array();
$query['fields'] = "SELECT SUM( postmeta.meta_value ) FROM {$wpdb->posts} as posts";
$query['join'] = "INNER JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id ";
$query['where'] = sprintf( "WHERE posts.ID = %n", $product_id );
$query['where'] .= "AND posts.post_status IN ( 'wc-" . implode( "','wc-", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', 'on-hold' ) ) ) . "' ) ";
$query['where'] .= "AND postmeta.meta_key = '_order_total' ";
$sales = $wpdb->get_var( implode( ' ', $query ) );
Но, к сожалению, он отображает только 0. Есть ли кто-нибудь, кто может помочь A. исправить код для отдельного продукта, или B. найти лучший способ сделать это в зависимости от продукта?
Спасибо за любую помощь по этому вопросу.
Мне было интересно, как это сделать, и это то, что я придумал.
SELECT SUM( order_item_meta__line_total.meta_value) as order_item_amount FROM wp_posts AS posts INNER JOIN wp_woocommerce_order_items AS order_items ON posts.ID = order_items.order_id INNER JOIN wp_woocommerce_order_itemmeta AS order_item_meta__line_total ON (order_items.order_item_id = order_item_meta__line_total.order_item_id) AND (order_item_meta__line_total.meta_key = '_line_total') INNER JOIN wp_woocommerce_order_itemmeta AS order_item_meta__product_id_array ON order_items.order_item_id = order_item_meta__product_id_array.order_item_id WHERE posts.post_type IN ( 'shop_order','shop_order_refund' ) AND posts.post_status IN ( 'wc-completed','wc-processing','wc-on-hold') AND ( ( order_item_meta__product_id_array.meta_key IN ('_product_id','_variation_id') AND order_item_meta__product_id_array.meta_value IN ('".$product_id."') ))
Вам может понадобиться построить этот запрос в виде массива, как указано выше.
Других решений пока нет …