Extiende wc_get_orders() con una clave meta personalizada y un valor meta

2 minutos de lectura

avatar de usuario de davidasor
davidasor

Estoy tratando de obtener todos los pedidos de la tienda con una meta clave “order_referrer_id” y el valor será una identificación de usuario, por ejemplo, “1060”.

Esto es lo que he intentado hasta ahora:

$args = array(
        'limit' => -1,
        'status' => 'completed',
        'meta_query' => array(
            array(
                'key' => 'order_referrer_id',
                'value' => 1060,
                'compare' => '='
            ),
        ),
        'return' => 'ids',
    ); 

$orders = wc_get_orders( $args );

Por alguna razón, la consulta ignora la meta consulta y devuelve todos los pedidos.

¿Cuál es la forma correcta de filtrar los pedidos de la tienda?

Avatar de usuario de 7uc1f3r
7uc1f3r

wc_get_orders y WC_Order_Query proporcionar una forma estándar de recuperar pedidos que sea segura de usar y que no se rompa debido a cambios en la base de datos en futuras versiones de WooCommerce.

Fuente: wc_get_orders y WC_Order_Query


Puedes usar meta_key, meta_value y meta_comparepor lo que obtienes:

$args = array(
    'status'        => 'completed', // Accepts a string: one of 'pending', 'processing', 'on-hold', 'completed', 'refunded, 'failed', 'cancelled', or a custom order status.
    'meta_key'      => 'order_referrer_id', // Postmeta key field
    'meta_value'    => 1060, // Postmeta value field
    'meta_compare'  => '=', // Possible values are ‘=’, ‘!=’, ‘>’, ‘>=’, ‘<‘, ‘<=’, ‘LIKE’, ‘NOT LIKE’, ‘IN’, ‘NOT IN’, ‘BETWEEN’, ‘NOT BETWEEN’, ‘EXISTS’ (only in WP >= 3.5), and ‘NOT EXISTS’ (also only in WP >= 3.5). Values ‘REGEXP’, ‘NOT REGEXP’ and ‘RLIKE’ were added in WordPress 3.7. Default value is ‘=’.
    'return'        => 'ids' // Accepts a string: 'ids' or 'objects'. Default: 'objects'.
);

$orders = wc_get_orders( $args );

// NOT empty
if ( ! empty ( $orders ) ) {  
    foreach ( $orders as $order ) {
        echo '<p>ID = ' . $order . '</p>';
    }
}

¿Ha sido útil esta solución?