Woocommerce echo общий объем розничных продаж по продукту

Я искал вокруг и не могу найти что-нибудь. Прямо сейчас у меня есть запрос, чтобы показать мои продукты из моего магазина. Мне нужно иметь возможность также отображать в запросе общие продажи каждого продукта и общие розничные продажи каждого продукта. Я использую это, чтобы создать таблицу лидеров.

Общий объем продаж прост, это просто настраиваемое поле, которое woocommerce вставляет для вас. У меня проблемы с поиском ответа для общих розничных продаж.

Мне также нужно отобразить общие розничные продажи всего магазина, но, похоже, ничто не поможет в этом.

У меня был код на эта страница работает, но затем плагин обновился и он перестал работать. Он просто показывал 0, а теперь ничего не показывает.

Вот мой запрос прямо сейчас, используя код с указанной выше страницы.

    <?php $my_query = new WP_Query( array( 'post_type' => 'product', 'posts_per_page' => -1 ) );?>
<?php if ( $my_query->have_posts() ) : ?>
<?php $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
LEFT JOIN {$wpdb->term_relationships} AS rel ON posts.ID = rel.object_ID
LEFT JOIN {$wpdb->term_taxonomy} AS tax USING( term_taxonomy_id )
LEFT JOIN {$wpdb->terms} AS term USING( term_id )

WHERE   posts.post_type     = 'shop_order'
AND     posts.post_status   = 'publish'
AND     tax.taxonomy        = 'shop_order_status'
AND     term.slug           IN ('" . implode( "','", apply_filters( 'woocommerce_reports_order_statuses', array( 'completed', 'processing', '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
" )); ?>
<?php while($my_query->have_posts()): $my_query->the_post(); ?><div id="<?php $totalDonations = 0;
$Charities = array($post->ID);
//Gather Total for Individual Items
foreach ($order_items as $item) {

if (in_array($item->product_id, $Charities)) {

$totalDonations = $item->line_total + $totalDonations;}

} echo $totalDonations; ?>" class="sort_by_total">
<div class="one_half">
<li><span><?php the_title(); ?></span></li>
</div>
<div class="one_quarter">
<p><?php echo get_post_meta($post->ID, 'total_sales', true); ?></p>
</div>
<div class="one_quarter last">
<p>$<?php echo $totalDonations; ?></p>
</div>
<div class="clear"></div>
<div class="divider"></div>
</div>
<?php endwhile; ?>

<?php else : ?>

<?php endif; ?>
<?php wp_reset_query();?>

После того, как они отображаются, я использую общий объем розничных продаж в качестве идентификатора для каждого div и заказываю таблицу лидеров с помощью jquery. Вот почему он вызывается дважды в коде.

Любая помощь приветствуется. Спасибо

РЕДАКТИРОВАТЬ: я проверял сообщения об ошибках, и я получаю: PHP Fatal error: Using $this when not in object context on line 33 Также получена та же ошибка для строки 66. Строка 33 — это строка, которая начинается с <?php $order_items = apply_filters( и линия 66 является линией, которая начинается if (in_array($item->product_id, $Charities)) {

РЕДАКТИРОВАТЬ РЕДАКТИРОВАТЬ: Теперь я не получаю никаких сообщений об ошибках.

0

Решение

Виджет панели мониторинга WooCommerce 2.2 использует следующий код для расчета розничных продаж за последний месяц:

    // Sales
$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' ";
$query['where']  .= "AND posts.post_date >= '" . date( 'Y-m-01', current_time( 'timestamp' ) ) . "' ";
$query['where']  .= "AND posts.post_date <= '" . date( 'Y-m-d H:i:s', current_time( 'timestamp' ) ) . "' ";

$sales = $wpdb->get_var( implode( ' ', apply_filters( 'woocommerce_dashboard_status_widget_sales_query', $query ) ) );

затем позже отобразив его с помощью:

wc_price( $sales );

Поскольку даты ограничены в последних 2 строках $query['where'] Я предполагаю, что эти строки могут быть удалены, если вы хотите получить общий объем продаж за все время.

    // 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 ) );

Это кажется мне довольно интенсивным запросом, поэтому, если он будет выполняться постоянно, возможно, вы захотите исследовать переходные процессы.

Я менее уверен в том, чтобы модифицировать его для отдельного продукта, потому что я слаб в SQL, но вот попытка получить строку «где», чтобы указать идентификатор продукта.

    // All-time Sales for specific product, maybe
$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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]