WP_Query和WooCommerce订单,具有待处理状态问题



我无法获取状态为 wc 待处理/待付款的订单对象。它只是返回所有订单对象:

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

您的代码只是按预期完美运行,在前端,我已经对其进行了测试,它仅输出具有**待处理状态的订单。所以我无法说出你的问题是什么,因为你的问题不详细。

我在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

我通过简单地使用自定义查询解决了这个奇怪的问题。

不知何故添加'post_status' => 'wc-pending'实际上并没有更改查询,但是如果我使用 'post_status' => 'pending' ,查询会发生变化。

所以我所做的是使用该自定义查询并将pending修改为 wc-pending .

我在

调试时确实遇到了同样的问题(返回所有订单)。

将调试代码包装到操作中有助于输出预期数据:

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();
}

相关内容

  • 没有找到相关文章

最新更新