在my-orders.php中检索单个订单

时间:2018-01-31 07:03:16

标签: php wordpress woocommerce orders

我正在尝试在my-orders.php中添加一个搜索表单,用户可以通过输入订单ID来搜索订单表。

目前,我正在使用get_posts检索所有订单:

$customer_orders = get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
'numberposts' => $order_count,
'meta_key'    => '_customer_user',
'meta_value'  => get_current_user_id(),
'post_type'   => wc_get_order_types( 'view-orders' ),
'post_status' => 'wc-quotes') ) );

我有什么方法可以按订单ID检索订单(在搜索栏中输入值)?

我还是WooCommerce的新手,所以如果我的解释令人困惑,请原谅我。

2 个答案:

答案 0 :(得分:0)

使用wc_get_order功能并传递您的orderid参数

// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );

$order_data = $order->get_data(); // The Order data

现在您可以使用$order_data

echo '<pre>'; print_r($order_data); 

参考

https://docs.woocommerce.com/wc-apidocs/function-wc_get_order.html https://docs.woocommerce.com/document/composite-products/composite-products-functions-reference/

答案 1 :(得分:0)

您需要先在页面中添加自定义表单,因为普通搜索栏不适用于此页面。

以下是使用post方法的自定义表单:

echo'<form method="post" action="">
    <label>Search an Order ID</label><br>
    <input type="text" name="orderid" value="">
    <input type="submit" name="submit_trusted_list" value="Submit"/>
</form>';

然后,由于查询订单的代码中包含了钩子过滤器 woocommerce_my_account_my_orders_query ,您将使用自定义钩子函数,其中参数'post__in'将使用给定订单ID:

add_filter( 'woocommerce_my_account_my_orders_query', 'search_orders_by_id', 20, 1 );
function search_orders_by_id( $args ){
    if( isset($_POST['orderid']) && is_numeric ($_POST['orderid']) ){
        $args['post__in'] = array(intval($_POST['orderid']));
    }
    return $args;
}

代码进入活动子主题(或活动主题)的function.php文件。

经过测试和工作。

  

因此,您只会获得所请求订单的过滤列表。