2014-06-13 13:20:14 +00:00
< ? php
2015-11-06 09:22:19 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
2016-11-18 11:33:31 +00:00
exit ;
2015-11-06 09:22:19 +00:00
}
2014-06-13 13:20:14 +00:00
/**
2015-11-03 13:53:50 +00:00
* Order Factory Class
2014-06-13 13:20:14 +00:00
*
2015-11-03 13:31:20 +00:00
* The WooCommerce order factory creating the right order objects .
2014-06-13 13:20:14 +00:00
*
* @ class WC_Order_Factory
2016-06-21 19:07:31 +00:00
* @ version 2.7 . 0
2014-06-13 13:20:14 +00:00
* @ package WooCommerce / Classes
* @ category Class
2016-11-18 11:33:31 +00:00
* @ author WooCommerce
2014-06-13 13:20:14 +00:00
*/
class WC_Order_Factory {
/**
2016-01-06 15:24:47 +00:00
* Get order .
2014-06-13 13:20:14 +00:00
*
2016-11-17 16:12:04 +00:00
* @ param mixed $order_id ( default : false )
2015-02-03 15:55:40 +00:00
* @ return WC_Order | bool
2014-06-13 13:20:14 +00:00
*/
2016-11-17 16:12:04 +00:00
public static function get_order ( $order_id = false ) {
$order_id = self :: get_order_id ( $order_id );
2014-06-13 13:20:14 +00:00
2016-11-17 16:12:04 +00:00
if ( ! $order_id ) {
2014-06-13 13:20:14 +00:00
return false ;
}
2016-11-17 16:12:04 +00:00
$post_type = get_post_type ( $order_id );
2014-07-07 10:44:27 +00:00
2014-07-11 11:43:42 +00:00
if ( $order_type = wc_get_order_type ( $post_type ) ) {
$classname = $order_type [ 'class_name' ];
2014-06-13 13:20:14 +00:00
} else {
2014-07-08 17:10:37 +00:00
$classname = false ;
2014-06-13 13:20:14 +00:00
}
// Filter classname so that the class can be overridden if extended.
2016-11-17 16:12:04 +00:00
$classname = apply_filters ( 'woocommerce_order_class' , $classname , $post_type , $order_id );
2014-06-13 13:20:14 +00:00
2014-07-07 10:44:27 +00:00
if ( ! class_exists ( $classname ) ) {
2015-05-19 16:51:04 +00:00
return false ;
2014-07-07 10:44:27 +00:00
}
2014-06-13 13:20:14 +00:00
2016-11-17 16:12:04 +00:00
return new $classname ( $order_id );
2014-06-13 13:20:14 +00:00
}
2016-06-21 19:07:31 +00:00
/**
* Get order item .
* @ param int
2016-08-19 12:43:33 +00:00
* @ return WC_Order_Item | false if not found
2016-06-21 19:07:31 +00:00
*/
public static function get_order_item ( $item_id = 0 ) {
global $wpdb ;
if ( is_numeric ( $item_id ) ) {
2016-11-17 21:30:34 +00:00
$item_data = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT order_item_type FROM { $wpdb -> prefix } woocommerce_order_items WHERE order_item_id = %d LIMIT 1; " , $item_id ) );
2016-06-21 19:07:31 +00:00
$item_type = $item_data -> order_item_type ;
2016-11-17 21:30:34 +00:00
$id = $item_id ;
2016-06-21 19:07:31 +00:00
} elseif ( $item_id instanceof WC_Order_Item ) {
2016-11-17 21:30:34 +00:00
$item_type = $item_id -> get_type ();
$id = $item_id -> get_id ();
2016-08-27 04:23:02 +00:00
} elseif ( is_object ( $item_id ) && ! empty ( $item_id -> order_item_type ) ) {
2016-11-18 13:20:59 +00:00
$id = $item_id -> order_item_id ;
2016-06-21 19:07:31 +00:00
$item_type = $item_id -> order_item_type ;
} else {
$item_data = false ;
$item_type = false ;
2016-11-17 21:30:34 +00:00
$id = false ;
2016-06-21 19:07:31 +00:00
}
2016-11-17 21:30:34 +00:00
if ( $id && $item_type ) {
2016-11-18 11:33:31 +00:00
$classname = false ;
2016-06-21 19:07:31 +00:00
switch ( $item_type ) {
case 'line_item' :
case 'product' :
2016-11-18 11:33:31 +00:00
$classname = 'WC_Order_Item_Product' ;
2016-06-21 19:07:31 +00:00
break ;
case 'coupon' :
2016-11-18 11:33:31 +00:00
$classname = 'WC_Order_Item_Coupon' ;
2016-06-21 19:07:31 +00:00
break ;
case 'fee' :
2016-11-18 11:33:31 +00:00
$classname = 'WC_Order_Item_Fee' ;
2016-06-21 19:07:31 +00:00
break ;
case 'shipping' :
2016-11-18 11:33:31 +00:00
$classname = 'WC_Order_Item_Shipping' ;
2016-06-21 19:07:31 +00:00
break ;
case 'tax' :
2016-11-18 11:33:31 +00:00
$classname = 'WC_Order_Item_Tax' ;
2016-06-21 19:07:31 +00:00
break ;
}
2016-11-18 11:33:31 +00:00
if ( $classname ) {
try {
return new $classname ( $id );
} catch ( Exception $e ) {
return false ;
}
}
2016-06-21 19:07:31 +00:00
}
2016-08-19 12:43:33 +00:00
return false ;
2016-06-21 19:07:31 +00:00
}
2016-11-17 16:12:04 +00:00
/**
* Get the order ID depending on what was passed .
*
* @ since 2.7 . 0
2016-11-18 10:13:54 +00:00
* @ param mixed $order
2016-11-17 16:12:04 +00:00
* @ return int | bool false on failure
*/
2016-11-21 14:30:56 +00:00
public static function get_order_id ( $order ) {
2016-11-17 16:12:04 +00:00
global $post ;
if ( false === $order && is_a ( $post , 'WP_Post' ) && 'shop_order' === get_post_type ( $post ) ) {
return $post -> ID ;
} elseif ( is_numeric ( $order ) ) {
return $order ;
} elseif ( $order instanceof WC_Abstract_Order ) {
return $order -> get_id ();
} elseif ( ! empty ( $order -> ID ) ) {
return $order -> ID ;
} else {
return false ;
}
}
2014-07-07 19:19:51 +00:00
}