Get all Orders IDs from a product ID in Woocommerce

后端 未结 4 1868
说谎
说谎 2020-12-04 03:24

How can I get an array with Order IDs by Product ID?

I mean receive all orders where specific product is presented.

I know how to do this by MySQL, but is t

4条回答
  •  情深已故
    2020-12-04 04:30

    Modified function to get specific user product ids

    function retrieve_orders_ids_from_a_product_id( $product_id,$user_id )
    {
        global $wpdb;
    
        $table_posts = $wpdb->prefix . "posts";
        $table_postmeta = $wpdb->prefix . "postmeta";
        $table_items = $wpdb->prefix . "woocommerce_order_items";
        $table_itemmeta = $wpdb->prefix . "woocommerce_order_itemmeta";
    
        // Define HERE the orders status to include in  <==  <==  <==  <==  <==  <==  <==
        $orders_statuses = "'wc-completed', 'wc-processing', 'wc-on-hold'";
    
        # Requesting All defined statuses Orders IDs for a defined product ID
        $orders_ids = $wpdb->get_col( "
            SELECT DISTINCT $table_items.order_id
            FROM $table_itemmeta, $table_items, $table_posts , $table_postmeta
            WHERE  $table_items.order_item_id = $table_itemmeta.order_item_id
            AND $table_items.order_id = $table_posts.ID
            AND $table_posts.post_status IN ( $orders_statuses )
            AND $table_postmeta.meta_key LIKE '_customer_user'
            AND $table_postmeta.meta_value LIKE  '$user_id '
            AND $table_itemmeta.meta_key LIKE '_product_id'
            AND $table_itemmeta.meta_value LIKE '$product_id'
            ORDER BY $table_items.order_item_id DESC"
        );
        // return an array of Orders IDs for the given product ID
        return $orders_ids;
    }
    

    Usage Example

    ## This will display all orders containing this product ID in a coma separated string ##
    
    // A defined product ID: 40
    $product_id = 40;
    
    // Current User
    $current_user = wp_get_current_user();
    
    // We get all the Orders for the given product ID of current user in an arrray
    $orders_ids_array = retrieve_orders_ids_from_a_product_id( $product_id, $current_user->ID );
    
    // We display the orders in a coma separated list
    echo '

    ' . implode( ', ', $orders_ids_array ) . '

    ';

提交回复
热议问题