/var/www/html/wp-content/plugins/woocommerce/includes/wc-order-item-functions.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<?php
/**
 * WooCommerce Order Item Functions
 *
 * Functions for order specific things.
 *
 * @package WooCommerce\Functions
 * @version 3.4.0
 */

defined'ABSPATH' ) || exit;

/**
 * Add a item to an order (for example a line item).
 *
 * @param int   $order_id   Order ID.
 * @param array $item_array Items list.
 *
 * @throws Exception        When `WC_Data_Store::load` validation fails.
 * @return int|bool         Item ID or false
 */
function wc_add_order_item$order_id$item_array ) {
    
$order_id absint$order_id );

    if ( ! 
$order_id ) {
        return 
false;
    }

    
$defaults = array(
        
'order_item_name' => '',
        
'order_item_type' => 'line_item',
    );

    
$item_array wp_parse_args$item_array$defaults );
    
$data_store WC_Data_Store::load'order-item' );
    
$item_id    $data_store->add_order_item$order_id$item_array );
    
$item       WC_Order_Factory::get_order_item$item_id );

    
do_action'woocommerce_new_order_item'$item_id$item$order_id );

    return 
$item_id;
}

/**
 * Update an item for an order.
 *
 * @since 2.2
 * @param int   $item_id Item ID.
 * @param array $args    Either `order_item_type` or `order_item_name`.
 *
 * @throws Exception     When `WC_Data_Store::load` validation fails.
 * @return bool          True if successfully updated, false otherwise.
 */
function wc_update_order_item$item_id$args ) {
    
$data_store WC_Data_Store::load'order-item' );
    
$update     $data_store->update_order_item$item_id$args );

    if ( 
false === $update ) {
        return 
false;
    }

    
do_action'woocommerce_update_order_item'$item_id$args );

    return 
true;
}

/**
 * Delete an item from the order it belongs to based on item id.
 *
 * @param int $item_id  Item ID.
 *
 * @throws Exception    When `WC_Data_Store::load` validation fails.
 * @return bool
 */
function wc_delete_order_item$item_id ) {
    
$item_id absint$item_id );

    if ( ! 
$item_id ) {
        return 
false;
    }

    
$data_store WC_Data_Store::load'order-item' );

    
do_action'woocommerce_before_delete_order_item'$item_id );

    
$data_store->delete_order_item$item_id );

    
do_action'woocommerce_delete_order_item'$item_id );

    return 
true;
}

/**
 * WooCommerce Order Item Meta API - Update term meta.
 *
 * @param int    $item_id    Item ID.
 * @param string $meta_key   Meta key.
 * @param mixed  $meta_value Meta value.
 * @param string $prev_value Previous value (default: '').
 *
 * @throws Exception         When `WC_Data_Store::load` validation fails.
 * @return bool
 */
function wc_update_order_item_meta$item_id$meta_key$meta_value$prev_value '' ) {
    
$data_store WC_Data_Store::load'order-item' );
    if ( 
$data_store->update_metadata$item_id$meta_key$meta_value$prev_value ) ) {
        
WC_Cache_Helper::invalidate_cache_group'object_' $item_id ); // Invalidate cache.
        
return true;
    }
    return 
false;
}

/**
 * WooCommerce Order Item Meta API - Add term meta.
 *
 * @param int    $item_id    Item ID.
 * @param string $meta_key   Meta key.
 * @param mixed  $meta_value Meta value.
 * @param bool   $unique     If meta data should be unique (default: false).
 *
 * @throws Exception         When `WC_Data_Store::load` validation fails.
 * @return int               New row ID or 0.
 */
function wc_add_order_item_meta$item_id$meta_key$meta_value$unique false ) {
    
$data_store WC_Data_Store::load'order-item' );
    
$meta_id    $data_store->add_metadata$item_id$meta_key$meta_value$unique );

    if ( 
$meta_id ) {
        
WC_Cache_Helper::invalidate_cache_group'object_' $item_id ); // Invalidate cache.
        
return $meta_id;
    }
    return 
0;
}

/**
 * WooCommerce Order Item Meta API - Delete term meta.
 *
 * @param int    $item_id    Item ID.
 * @param string $meta_key   Meta key.
 * @param mixed  $meta_value Meta value (default: '').
 * @param bool   $delete_all Delete all meta data, defaults to `false`.
 *
 * @throws Exception         When `WC_Data_Store::load` validation fails.
 * @return bool
 */
function wc_delete_order_item_meta$item_id$meta_key$meta_value ''$delete_all false ) {
    
$data_store WC_Data_Store::load'order-item' );
    if ( 
$data_store->delete_metadata$item_id$meta_key$meta_value$delete_all ) ) {
        
WC_Cache_Helper::invalidate_cache_group'object_' $item_id ); // Invalidate cache.
        
return true;
    }
    return 
false;
}

/**
 * WooCommerce Order Item Meta API - Get term meta.
 *
 * @param int    $item_id Item ID.
 * @param string $key     Meta key.
 * @param bool   $single  Whether to return a single value. (default: true).
 *
 * @throws Exception      When `WC_Data_Store::load` validation fails.
 * @return mixed
 */
function wc_get_order_item_meta$item_id$key$single true ) {
    
$data_store WC_Data_Store::load'order-item' );
    return 
$data_store->get_metadata$item_id$key$single );
}

/**
 * Get order ID by order item ID.
 *
 * @param  int $item_id Item ID.
 *
 * @throws Exception    When `WC_Data_Store::load` validation fails.
 * @return int
 */
function wc_get_order_id_by_order_item_id$item_id ) {
    
$data_store WC_Data_Store::load'order-item' );
    return 
$data_store->get_order_id_by_order_item_id$item_id );
}