我无法获得状态为wc-pending / Pending Payment的订单对象。它只返回所有订单对象:
$my_course_query = new WP_Query( array(
'post_type' => 'shop_order',
'post_status' => 'wc-pending',
'posts_per_page' => -1
) );
答案 0 :(得分:4)
您的代码正如预期的那样完美地工作,在前端,我测试了它,它仅输出具有**待处理状态的订单。所以我不知道你的问题是什么,因为你的问题不详细。
我在WordPress WP_Query reference上找到了这个可能有用的说明:
注意:Ticket #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>';
}
}
这也只是为了获取订单对象。
答案 1 :(得分:0)
我通过简单地使用自定义查询修复了这个奇怪的问题。
以某种方式添加'post_status' => 'wc-pending'
实际上并未更改查询,但如果我使用'post_status' => 'pending'
,则查询会更改。
所以我所做的就是使用该自定义查询并将pending
修改为wc-pending
。
答案 2 :(得分:0)
调试时确实有相同的问题(返回所有订单)。
将调试代码包装到一个动作中有助于输出预期的数据:
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();
}