代码之家  ›  专栏  ›  技术社区  ›  nu everest शेखर

如何显示单个产品的所有订单,显示最新订单?Woocommerce

  •  0
  • nu everest शेखर  · 技术社区  · 8 年前

    备选方案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() ),
    ) );
    

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

    1 回复  |  直到 8 年前
        1
  •  2
  •   nu everest शेखर    8 年前

    以下是我根据这些文章提出的解决方案:

    解决方案

    <?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>