– Note: if you edit quantities or remove items from the order you will need to manually change the item\'s stock levels.', 'woothemes'), 'woocommerce_order_items_meta_box', 'shop_order', 'normal', 'high'); add_meta_box( 'woocommerce-order-totals', __('Order Totals', 'woothemes'), 'woocommerce_order_totals_meta_box', 'shop_order', 'side', 'default'); add_meta_box( 'woocommerce-order-actions', __('Order Actions', 'woothemes'), 'woocommerce_order_actions_meta_box', 'shop_order', 'side', 'default'); remove_meta_box( 'commentstatusdiv', 'shop_order' , 'normal' ); remove_meta_box( 'slugdiv', 'shop_order' , 'normal' ); add_meta_box( 'woocommerce-coupon-data', __('Coupon Data', 'woothemes'), 'woocommerce_coupon_data_meta_box', 'shop_coupon', 'normal', 'high'); remove_meta_box( 'commentstatusdiv', 'shop_coupon' , 'normal' ); remove_meta_box( 'slugdiv', 'shop_coupon' , 'normal' ); } /** * Save meta boxes * * Runs when a post is saved and does an action which the write panel save scripts can hook into. */ add_action( 'save_post', 'woocommerce_meta_boxes_save', 1, 2 ); function woocommerce_meta_boxes_save( $post_id, $post ) { global $wpdb; if ( !$_POST ) return $post_id; if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id; if ( !isset($_POST['woocommerce_meta_nonce']) || (isset($_POST['woocommerce_meta_nonce']) && !wp_verify_nonce( $_POST['woocommerce_meta_nonce'], 'woocommerce_save_data' ))) return $post_id; if ( !current_user_can( 'edit_post', $post_id )) return $post_id; if ( $post->post_type != 'product' && $post->post_type != 'shop_order' && $post->post_type != 'shop_coupon' ) return $post_id; do_action( 'woocommerce_process_'.$post->post_type.'_meta', $post_id, $post ); } /** * Product data * * Forces certain product data based on the product's type, e.g. grouped products cannot have a parent. */ add_filter('wp_insert_post_data', 'woocommerce_product_data'); function woocommerce_product_data( $data ) { global $post; if ($data['post_type']=='product' && isset($_POST['product-type'])) { $product_type = stripslashes( $_POST['product-type'] ); switch($product_type) : case "grouped" : case "variable" : $data['post_parent'] = 0; break; endswitch; } return $data; } /** * Order data * * Forces the order posts to have a title in a certain format (containing the date) */ add_filter('wp_insert_post_data', 'woocommerce_order_data'); function woocommerce_order_data( $data ) { global $post; if ($data['post_type']=='shop_order' && isset($data['post_date'])) { $order_title = 'Order'; if ($data['post_date']) $order_title.= ' – '.date('F j, Y @ h:i A', strtotime($data['post_date'])); $data['post_title'] = $order_title; } return $data; } /** * Save errors * * Stores error messages in a variable so they can be displayed on the edit post screen after saving. */ add_action( 'admin_notices', 'woocommerce_meta_boxes_save_errors' ); function woocommerce_meta_boxes_save_errors() { $woocommerce_errors = maybe_unserialize(get_option('woocommerce_errors')); if ($woocommerce_errors && sizeof($woocommerce_errors)>0) : echo '
'.$error.'
'; endforeach; echo '