/** * Save variations via AJAX. */ public static function save_variations() { ob_start(); check_ajax_referer('save-variations', 'security'); // Check permissions again and make sure we have what we need if (!current_user_can('edit_products') || empty($_POST) || empty($_POST['product_id'])) { die(-1); } // Remove previous meta box errors WC_Admin_Meta_Boxes::$meta_box_errors = array(); $product_id = absint($_POST['product_id']); $product_type = empty($_POST['product-type']) ? 'simple' : sanitize_title(stripslashes($_POST['product-type'])); $product_type_terms = wp_get_object_terms($product_id, 'product_type'); // If the product type hasn't been set or it has changed, update it before saving variations if (empty($product_type_terms) || $product_type !== sanitize_title(current($product_type_terms)->name)) { wp_set_object_terms($product_id, $product_type, 'product_type'); } WC_Meta_Box_Product_Data::save_variations($product_id, get_post($product_id)); do_action('woocommerce_ajax_save_product_variations', $product_id); // Clear cache/transients wc_delete_product_transients($product_id); if ($errors = WC_Admin_Meta_Boxes::$meta_box_errors) { echo '<div class="error notice is-dismissible">'; foreach ($errors as $error) { echo '<p>' . wp_kses_post($error) . '</p>'; } echo '<button type="button" class="notice-dismiss"><span class="screen-reader-text">' . __('Dismiss this notice.', 'woocommerce') . '</span></button>'; echo '</div>'; delete_option('woocommerce_meta_box_errors'); } die; }
/** * Save variations via AJAX */ public static function save_variations() { ob_start(); check_ajax_referer('save-variations', 'security'); // Check permissions again and make sure we have what we need if (!current_user_can('edit_products') || empty($_POST) || empty($_POST['product_id'])) { die(-1); } // Remove previous meta box errors WC_Admin_Meta_Boxes::$meta_box_errors = array(); $product_id = absint($_POST['product_id']); WC_Meta_Box_Product_Data::save_variations($product_id, get_post($product_id)); do_action('woocommerce_ajax_save_product_variations', $product_id); // Clear cache/transients wc_delete_product_transients($product_id); if ($errors = WC_Admin_Meta_Boxes::$meta_box_errors) { echo '<div class="error notice is-dismissible">'; foreach ($errors as $error) { echo '<p>' . wp_kses_post($error) . '</p>'; } echo '<button type="button" class="notice-dismiss"><span class="screen-reader-text">' . __('Dismiss this notice.', 'woocommerce') . '</span></button>'; echo '</div>'; delete_option('woocommerce_meta_box_errors'); } die; }