Использование аргумента wc_get_orders() orderby для пользовательского поля в WooCommerce

#php #wordpress #sorting #woocommerce #orders

#php #wordpress #сортировка #woocommerce #заказы

Вопрос:

У меня есть мета-поле, в котором указано время, например 12:0,0 13:03, 01:00… Я хотел бы упорядочить это поле «billing_eta»

в настоящее время у меня есть приведенный ниже код, в который я добавил аргументы orderby и order, однако они игнорируются.

как я могу упорядочить по времени в мета-поле?

 $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 );
  

теперь он работает, используя следующее, если это поможет кому-либо еще:

 $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'
        ),
    )
);
  

Комментарии:

1. Вы уверены, что мета-ключ billing_date не начинается с символа подчеркивания типа _billing_date (проверьте это в wp_postmeta таблице базы данных).

2. Я пробовал это с обоими. Я обнаружил, что в billing_date как с, так и без работы, но только с выбранными заказами, где это было исходное значение, а не те, которые были изменены в панели администратора. Поэтому я предположил, что это будет то же самое для time (billing_eta).

3. Да, оно должно быть одинаковым для всех пользовательских полей…

4. странно, что это другое… но в любом случае я все еще не могу заказать _billing_eta или billing_eta . есть идеи?

5. Да, это работает так же, как в WP_Query для параметров пользовательских полей и параметров orderby.

Ответ №1:

необходимы оба мета-элемента в мета_запросе таким образом:

 $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'
        ),
    )
);