【问题标题】:How to display all orders for a single product showing the most recent first? Woocommerce如何显示单个产品的所有订单,首先显示最新的?电子商务
【发布时间】:2017-03-26 21:52:10
【问题描述】:

我在前端有一个受密码保护的页面。在该页面上,我想显示与单个 woocommerce 产品 ID 关联的所有购买的完整列表。

选项 1:

我查看了woocommerce docs,发现: WC_CLI_Order 和一个列出所有订单的list_( $args, $assoc_args ) 函数。

想必可以通过product id过滤订单

[--=] 根据订单属性过滤订单。

订单项字段(数字数组,从索引零开始):

line_items.0.product_id

选项 2:

found this article,但它基于客户 ID。我已经根据对 meta_key 和 meta_value 的猜测修改了代码。

$customer_orders = get_posts( array(
    'numberposts' => -1,
    'meta_key'    => '_product',
    'meta_value'  => get_product_id(),
    'post_type'   => wc_get_order_types(),
    'post_status' => array_keys( wc_get_order_statuses() ),
) );

如何显示单个产品的所有订单,首先显示最近的订单?

【问题讨论】:

  • 您是否尝试过更改查询以根据您的产品进行购买?像 get_purchases(array('product' => 'pencil')) 它正在构建您需要的查询玩具。我不是 woocommerce 方面的专家。但我认为这些数组应该是一个查询键,如果 meta_value 不在您的表中,则不需要它

标签: php wordpress woocommerce custom-wordpress-pages


【解决方案1】:

这是我根据这些文章整理的解决方案:

解决办法

<?php /* Template Name: CustomPageT1 */ ?>
<?php
global $wpdb;
$produto_id = 41; // Product ID
$consulta = "SELECT order_id " .
            "FROM {$wpdb->prefix}woocommerce_order_itemmeta woim " .
            "LEFT JOIN {$wpdb->prefix}woocommerce_order_items oi " .
            "ON woim.order_item_id = oi.order_item_id " .
            "WHERE meta_key = '_product_id' AND meta_value = %d " .
            "GROUP BY order_id;";

$order_ids = $wpdb->get_col( $wpdb->prepare( $consulta, $produto_id ) );

foreach( $order_ids as $order_id ) {
    var_dump($order_id);
}

if( $order_ids ) {
    $args = array(
        'post_type' => 'shop_order',
        'post__in' => $order_ids,
        'post_status' => 'publish',
        'posts_per_page' => 20,
        'order' => 'DESC',
        'tax_query' => array(
            array(
                'taxonomy' => 'shop_order_status',
                'field' => 'slug',
                'terms' => array (
                    'Pending' , 'Failed' , 'Processing' , 'Completed', 'On-Hold' , 'Cancelled' , 'Refunded'
                )
            )
        )
    );
    $wc_query = new WP_Query( $args );
}

?>

// Display products
<div>
    <?php if ($wc_query->have_posts()) : ?>
    <?php while ($wc_query->have_posts()) : // (4)
                    $wc_query->the_post(); // (4.1) ?>

    <ul>
        <li>
            <?php the_title(); // (4.2) ?>
        </li>
    </ul>

    <?php endwhile; ?>
    <?php wp_reset_postdata(); // (5) ?>
    <?php else:  ?>
    <p>
         <?php _e( 'No Orders' ); // (6) ?>
    </p>
    <?php endif; ?>
</div>

【讨论】:

  • 感谢您的解决方案,非常适合我的需求。请注意,WooCommerce > 2.2 不再对订单状态使用分类法。您应该改用 post_status。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 2012-09-01
相关资源
最近更新 更多