0

I want to loop through my orders and get only the orders with a specific custom field and value.

function lwb_5483845() {

    $args = array(
        'limit' => 9999,
        'return' => 'ids',
        'meta_query' => array(

            'key' => 'lwb_pickup_time_email_notification',
            'value' => '31-07-2022',
            'compare' => '=',
        ),
    );
    
    $query = new WC_Order_Query( $args );
    $orders = $query->get_orders();
    
    foreach( $orders as $order_id ) {
        echo $order_id . '<br />';
    }

}
add_filter( 'woocommerce_before_cart', 'lwb_5483845', 10, 2 );
LovinQuaQua
  • 111
  • 2
  • 12

2 Answers2

2

meta_query is not enabled (by default at least) for WC_Order_Query. To make this work, you need to use the meta_key, meta_value, meta_value_num and meta_compare parameters.

This is detailed in this answer discussing how meta_query isn't active.

So in your case, you could do:

function lwb_5483845() {

  $args = array(
    'limit' => 9999,
    'return' => 'ids',
    'meta_key' => 'lwb_pickup_time_email_notification',
    'meta_value' => '31-07-2022',
    'meta_compare' => '='
  );

  $query = new WC_Order_Query( $args );
  $orders = $query->get_orders();

  foreach( $orders as $order_id ) {
    echo $order_id . '<br />';
  }
}
add_filter( 'woocommerce_before_cart', 'lwb_5483845', 10, 2 );
Feel Content
  • 117
  • 9
0

The meta_query index need to be an array of array, because you can set multiple where statements :

function lwb_5483845() {

    $args = array(
        'limit' => 9999,
        'return' => 'ids',
        'meta_query' => array(
            array(
                'key' => 'lwb_pickup_time_email_notification',
                'value' => '31-07-2022',
                'compare' => '=',
            ),
        ),
    );
    
    $query = new WC_Order_Query( $args );
    $orders = $query->get_orders();
    
    foreach( $orders as $order_id ) {
        echo $order_id . '<br />';
    }

}
add_filter( 'woocommerce_before_cart', 'lwb_5483845', 10, 2 );
Obzi
  • 2,384
  • 1
  • 9
  • 22