public static function shipping_classes_save_changes()
{
if (!isset($_POST['wc_shipping_classes_nonce'], $_POST['changes'])) {
wp_send_json_error('missing_fields');
exit;
}
if (!wp_verify_nonce($_POST['wc_shipping_classes_nonce'], 'wc_shipping_classes_nonce')) {
wp_send_json_error('bad_nonce');
exit;
}
if (!current_user_can('manage_woocommerce')) {
wp_send_json_error('missing_capabilities');
exit;
}
$changes = $_POST['changes'];
foreach ($changes as $term_id => $data) {
$term_id = absint($term_id);
if (isset($data['deleted'])) {
if (isset($data['newRow'])) {
// So the user added and deleted a new row.
// That's fine, it's not in the database anyways. NEXT!
continue;
}
wp_delete_term($term_id, 'product_shipping_class');
continue;
}
$update_args = array();
if (isset($data['name'])) {
$update_args['name'] = wc_clean($data['name']);
}
if (isset($data['slug'])) {
$update_args['slug'] = wc_clean($data['slug']);
}
if (isset($data['description'])) {
$update_args['description'] = wc_clean($data['description']);
}
if (isset($data['newRow'])) {
$update_args = array_filter($update_args);
if (empty($update_args['name'])) {
continue;
}
$term_id = wp_insert_term($update_args['name'], 'product_shipping_class', $update_args);
} else {
wp_update_term($term_id, 'product_shipping_class', $update_args);
}
do_action('woocommerce_shipping_classes_save_class', $term_id, $data);
}
$wc_shipping = WC_Shipping::instance();
wp_send_json_success(array('shipping_classes' => $wc_shipping->get_shipping_classes()));
}