限制订单类型以避免在 WooCommerce 中完成订单时出错
Limit order type to avoid errors when completing an order in WooCommerce
我想显示一个基于订单状态的报告,如果它已经完成然后显示一些数据
但它适用于所有订单状态,例如,如果我暂停,它会获取数据,但当我完成时,我会收到此错误
Fatal error: Call to undefined method WC_Order_Refund::get_order_number()
这是我的代码
//Get Report for Orders that have status of delivered
foreach( $orders as $order ){
if ( $order->get_status() === 'completed'){
$order_data = $order->get_data(); // The Order data
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item->get_name();
$product_id = $item->get_product_id();
}
$orders_completed .= '<tr><td>' . $order->get_order_number() . '</td>' .
'<td>' . $order->get_date_created()->date('Y-m-d H:i:s') . '</td>' .
'<td>' . $order->get_status() . '</td>' .
'<td>' . $order->get_total() . '</td>' .
'<td>' . $product_id . '</td>' .
'<td>' . $product_name . '</td>' .
'<td>' . $order->get_item_count() . '</td>' .
'<td>' . $order->get_billing_first_name() . '</td>' .
'<td>' . $order->get_billing_email() . '</td>' .
'<td>' . $order->get_billing_phone() . '</td>' .
'<td>' . $order_payment_method = $order_data['payment_method_title'] . '</td></tr>';
}
}
如果我将 'completed' 更改为 'on-hold' 或任何其他状态,它将工作并获取数据
但是如何让它处理已完成的订单?
非常感谢
要获取已完成的订单列表,您可以使用此
if ($order->payment_complete()){
}
问题与订单类型有关,应该是"shop order"…有2种方式:
1) 检查订单类型,需要"shop_order" (但不是"shop_order_refund")。因此,您可以使用也适用于 WC_Order_Refund
class 的方法 get_type() ,例如:
foreach( $orders as $order ){
if ( $order->get_type() === 'shop_order' && $order->get_status() === 'completed'){
$order_data = $order->get_data(); // The Order data
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item->get_name();
$product_id = $item->get_product_id();
}
$orders_completed .= '<tr><td>' . $order->get_order_number() . '</td>' .
'<td>' . $order->get_date_created()->date('Y-m-d H:i:s') . '</td>' .
'<td>' . $order->get_status() . '</td>' .
'<td>' . $order->get_total() . '</td>' .
'<td>' . $product_id . '</td>' .
'<td>' . $product_name . '</td>' .
'<td>' . $order->get_item_count() . '</td>' .
'<td>' . $order->get_billing_first_name() . '</td>' .
'<td>' . $order->get_billing_email() . '</td>' .
'<td>' . $order->get_billing_phone() . '</td>' .
'<td>' . $order_payment_method = $order_data['payment_method_title'] . '</td></tr>';
}
};
2) 更改 WC_Order_Query,仅针对 "shop_order" post 类型:
$orders = wc_get_orders( array('limit' => -1, 'type' => 'shop_order') );
两种方式都可以避免出现这个致命错误
我想显示一个基于订单状态的报告,如果它已经完成然后显示一些数据
但它适用于所有订单状态,例如,如果我暂停,它会获取数据,但当我完成时,我会收到此错误
Fatal error: Call to undefined method WC_Order_Refund::get_order_number()
这是我的代码
//Get Report for Orders that have status of delivered
foreach( $orders as $order ){
if ( $order->get_status() === 'completed'){
$order_data = $order->get_data(); // The Order data
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item->get_name();
$product_id = $item->get_product_id();
}
$orders_completed .= '<tr><td>' . $order->get_order_number() . '</td>' .
'<td>' . $order->get_date_created()->date('Y-m-d H:i:s') . '</td>' .
'<td>' . $order->get_status() . '</td>' .
'<td>' . $order->get_total() . '</td>' .
'<td>' . $product_id . '</td>' .
'<td>' . $product_name . '</td>' .
'<td>' . $order->get_item_count() . '</td>' .
'<td>' . $order->get_billing_first_name() . '</td>' .
'<td>' . $order->get_billing_email() . '</td>' .
'<td>' . $order->get_billing_phone() . '</td>' .
'<td>' . $order_payment_method = $order_data['payment_method_title'] . '</td></tr>';
}
}
如果我将 'completed' 更改为 'on-hold' 或任何其他状态,它将工作并获取数据
但是如何让它处理已完成的订单?
非常感谢
要获取已完成的订单列表,您可以使用此
if ($order->payment_complete()){
}
问题与订单类型有关,应该是"shop order"…有2种方式:
1) 检查订单类型,需要"shop_order" (但不是"shop_order_refund")。因此,您可以使用也适用于 WC_Order_Refund
class 的方法 get_type() ,例如:
foreach( $orders as $order ){
if ( $order->get_type() === 'shop_order' && $order->get_status() === 'completed'){
$order_data = $order->get_data(); // The Order data
$items = $order->get_items();
foreach ( $items as $item ) {
$product_name = $item->get_name();
$product_id = $item->get_product_id();
}
$orders_completed .= '<tr><td>' . $order->get_order_number() . '</td>' .
'<td>' . $order->get_date_created()->date('Y-m-d H:i:s') . '</td>' .
'<td>' . $order->get_status() . '</td>' .
'<td>' . $order->get_total() . '</td>' .
'<td>' . $product_id . '</td>' .
'<td>' . $product_name . '</td>' .
'<td>' . $order->get_item_count() . '</td>' .
'<td>' . $order->get_billing_first_name() . '</td>' .
'<td>' . $order->get_billing_email() . '</td>' .
'<td>' . $order->get_billing_phone() . '</td>' .
'<td>' . $order_payment_method = $order_data['payment_method_title'] . '</td></tr>';
}
};
2) 更改 WC_Order_Query,仅针对 "shop_order" post 类型:
$orders = wc_get_orders( array('limit' => -1, 'type' => 'shop_order') );
两种方式都可以避免出现这个致命错误