Заказы WP_Query и WooCommerce с ожидающей проблемой статуса

Я не могу получить объекты заказа со статусом wc-pending/Pending Payment. Он просто возвращает ВСЕ объекты заказа:

$my_course_query = new WP_Query( array(
    'post_type'     => 'shop_order',
    'post_status'   => 'wc-pending',
    'posts_per_page'      => -1
) );

person Raymond Seger    schedule 31.01.2017    source источник


Ответы (3)


Ваш код просто отлично работает, как и ожидалось, во внешнем интерфейсе, я протестировал его, и он выводит только заказы со статусом **в ожидании. Поэтому я не могу сказать, в чем ваша проблема, поскольку ваш вопрос не детализирован.

Я нашел это примечание в справочнике WordPress WP_Query, которое может быть полезным:
Примечание: Заявка №18408 Для запроса сообщений в админке рассмотрите возможность использования get_posts() как wp_reset_postdata() может вести себя не так, как ожидалось.

Обычно я не использую WP_Query() для заказов клиентов, а wc_get_orders() (или get_posts() тоже) следующим образом:

$customer_orders = wc_get_orders( array(
    'limit'    => -1,
    'status'   => 'pending'
) );

// Iterating through each Order with pending status
foreach ( $customer_orders as $order ) {

    // Going through each current customer order items
    foreach($order->get_items() as $item_id => $item_values){
        $product_id = $item_values['product_id']; // product ID

        // Order Item meta data
        $item_meta_data = wc_get_order_item_meta( $item_id );

        // Some output
        echo '<p>Line total for '.wc_get_order_item_meta( $item_id, '_line_total', true ).'</p><br>';
    }
}

Это работает и для получения объектов заказов.

Связанная документация: wc_get_orders и WC_Order_Query

person LoicTheAztec    schedule 31.01.2017
comment
Привет, Любая идея, как я могу избежать получения объектов WC_Order_Refund при использовании wc_get_orders ? На самом деле я полагаюсь на тест внутри цикла (например: $order->get_type() !=='shop_order_refund'), но мне интересно, есть ли лучший способ использовать некоторую магию внутри запроса. - person Temani Afif; 02.06.2019
comment
@TemaniAfif Добавьте аргумент type, например 'type' => 'shop_order', чтобы избежать заказов на возврат средств… - person LoicTheAztec; 02.06.2019
comment
хорошо, спасибо, я не знаю, как я пропустил это из документации - я сосредоточился на аргументе состояния. - person Temani Afif; 02.06.2019

Я исправил эту странную проблему, просто используя пользовательский запрос.

Каким-то образом добавление 'post_status' => 'wc-pending' на самом деле не меняет запрос, но если я использую 'post_status' => 'pending', запрос меняется.

Итак, что я сделал, так это использовал этот пользовательский запрос и изменил pending на wc-pending.

person Raymond Seger    schedule 01.02.2017

У меня такая же проблема (возврат ВСЕХ заказов) во время отладки.

Обертывание кода отладки в действие помогло вывести ожидаемые данные:

add_action( 'init', 'debug_init' );

function debug_init() {

    $custom_query_args = array(
        "fields" => "ids",
        "post_type" => "shop_order",
        "post_status" => array('wc-processing'),
        "posts_per_page" => "-1",
        "offset" => "0",
        "date_query" => [
                "before" => "2020-09-10 23:59",
                "after" => "1970-01-01 00:00",
                "inclusive" => "1"
        ],
        "order" => "DESC"
    );


    $debugQuery = new WP_Query( $custom_query_args );
    $order_ids   = $debugQuery->posts;

    print_r($order_ids);

    die();
}
person Alchem    schedule 10.09.2020