Uso del argumento orderby de wc_get_orders() para un campo personalizado en WooCommerce

2 minutos de lectura

avatar de usuario
Adrián

Tengo un metacampo donde se ingresa una hora, por ejemplo, 12:0,0, 13:03, 01:00… Me gustaría ordenar por este campo “billing_eta”

actualmente, tengo el siguiente código al que he agregado los argumentos orderby y order, sin embargo, se ignoran.

¿Cómo puedo ordenar por hora en un campo meta?

$args = array(
    'orderby' => 'billing_eta', //has no effect as its a meta field 
    'order' => 'DESC',
    'status'       => 'completed', // Accepts a string: one of 'pending', 'processing', 'on-hold', 'completed', 'refunded, 'failed', 'cancelled', or a custom order status.
    'meta_key'     => 'billing_date', // Postmeta key field
    'meta_value'   => $ppr_arrival_date, // 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 ‘=’.
);

$orders = wc_get_orders( $args );

ahora funciona usando lo siguiente si ayuda a alguien más:

$args = array(
    'status' => 'completed',
    'orderby' => 'eta',
    'order' => 'ASC',
    'meta_query' => array(
        'arrival_date' => array(
            'key' => 'billing_date',
            'value' => $ppr_arrival_date,
            'compare' => '='
        ),
        'eta' => array(
            'key' => 'billing_eta',
            'compare' => 'EXISTS',
            'type' => 'TIME'
        ),
    )
);

  • ¿Estás seguro de que la clave meta billing_date no comienza con un guión bajo como _billing_date (compruébelo en wp_postmeta tabla de base de datos).

    – LoicTheAztec

    6 oct 2020 a las 13:23


  • Lo he probado con los dos. Descubrí que en la fecha de facturación con y sin trabajo, pero solo con pedidos recogidos donde era el valor original y no los cambiados en el panel de administración. Por lo tanto, asumí que sería lo mismo para el momento (billing_eta).

    – Adrián

    6 oct 2020 a las 13:46

  • Sí, debería ser el mismo para todos los campos personalizados…

    – LoicTheAztec

    6 oct 2020 a las 14:05

  • es extraño que sea diferente… pero de cualquier manera todavía no puedo ordenar por _billing_eta o billing_eta. ¿algunas ideas?

    – Adrián

    6 oct 2020 a las 14:24

  • Sí, funciona como en un WP_Query para parámetros de campos personalizados y ordenar por parámetros.

    – LoicTheAztec

    6 oct 2020 a las 21:32


necesitaba ambos meta elementos en meta_query por lo tanto:

$args = array(
    'status' => 'completed',
    'orderby' => 'eta',
    'order' => 'ASC',
    'meta_query' => array(
        'arrival_date' => array(
            'key' => 'billing_date',
            'value' => $ppr_arrival_date,
            'compare' => '='
        ),
        'eta' => array(
            'key' => 'billing_eta',
            'compare' => 'EXISTS',
            'type' => 'TIME'
        ),
    )
);

¿Ha sido útil esta solución?