function soya_get_prev_post_terms($post_id) { // $_SESSION['soya'] = $post_id; $post_terms_before = wp_get_post_terms($post_id, 'soya-range'); //$_SESSION['post_terms'] = $post_term_before; //retrieve meta keys before just before updating $before_post_meta_keys = []; $parent_terms_keys = []; $child_terms_parent_keys = []; foreach ($post_terms_before as $term) { $term_id = $term->term_id; $term_slug = $term->slug; if (soya_is_term_child($term_id)) { $term_parent_id = soya_get_term_parent_id($term_id); $term_parent_range = soya_loop_term_depth($term_parent_id); $child_term_depth = soya_get_term_custom_field($term_id, 'soya_depth_meta'); $term_parent_range['slug'] = $term_slug; $term_parent_range['depth'] = $child_term_depth; $child_terms_parent_keys[] = $term_parent_range; } else { $term_parent_range = soya_loop_term_depth($term_id); $parent_terms_keys[] = $term_parent_range; } } // form the meta keys if (isset($child_terms_parent_keys)) { foreach ($child_terms_parent_keys as $term_parent_range) { $term_depth = $term_parent_range['depth']; $term_slug = $term_parent_range['slug']; for ($i = 1; $i <= $term_depth; $i++) { unset($term_parent_range['slug']); unset($term_parent_range['depth']); foreach ($term_parent_range as $key => $label) { $before_post_meta_keys[] = $i . '-' . $term_slug . '-' . $key; } } } } if (isset($parent_terms_keys)) { foreach ($parent_terms_keys as $term_parent_range) { foreach ($term_parent_range as $key => $label) { $before_post_meta_keys[] = $key; } } } $_SESSION['post_terms'] = $before_post_meta_keys; }
/** * When the post is saved, saves our custom data. * * @param int $post_id The ID of the post being saved. */ function soya_save_meta_box_data($post_id) { /* * We need to verify this came from our screen and with proper authorization, * because the save_post action can be triggered at other times. */ // Check if our nonce is set. if (!isset($_POST['soya_meta_box_nonce'])) { return; } // Verify that the nonce is valid. if (!wp_verify_nonce($_POST['soya_meta_box_nonce'], 'soya_meta_box')) { return; } // If this is an autosave, our form has not been submitted, so we don't want to do anything. if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } // Check the user's permissions. if (isset($_POST['soya_feature']) && 'page' == $_POST['soya_feature']) { if (!current_user_can('edit_page', $post_id)) { return; } } else { if (!current_user_can('edit_post', $post_id)) { return; } } /* OK, it's safe for us to save the data now. */ // Make sure that it is set. // get post terms ids $post_terms_ids = soya_get_post_terms_ids($post_id); //set up all post terms ranges $parent_post_terms_ranges = []; $child_post_terms_ranges = []; if (isset($post_terms_ids)) { foreach ($post_terms_ids as $post_term_id) { if (soya_is_term_child($post_term_id)) { // We want only parents ranges and slugs. $child_term_parent_id = esc_attr(soya_get_term_parent_id($post_term_id)); $post_term_range = soya_loop_term_depth($child_term_parent_id); $post_child_term = get_term($post_term_id, 'soya-range'); // $post_term_depth = count($post_term_range); $post_term_depth = soya_get_term_custom_field($post_term_id, 'soya_depth_meta'); $post_term_slug = $post_child_term->slug; $post_term_range['depth'] = $post_term_depth; $post_term_range['slug'] = $post_term_slug; $child_post_terms_ranges[] = $post_term_range; } else { $post_term_range = soya_loop_term_depth($post_term_id); $parent_post_terms_ranges[] = $post_term_range; } } } //get keys from post terms ranges $all_meta_keys = []; $index = ''; //Iterate for parent meta keys if (isset($parent_post_terms_ranges)) { foreach ($parent_post_terms_ranges as $post_term_range) { foreach ($post_term_range as $key => $label) { $all_meta_keys[] = $key; } } } // Build meta keys for child terms if (isset($child_post_terms_ranges)) { //$index = ''; // $slug = ''; foreach ($child_post_terms_ranges as $index => $post_term_range) { //get Depth and slug for each child term $indexi = $post_term_range['depth']; $post_child_term_slug = $post_term_range['slug']; // loop through each term's depth and get indices for meta keys for ($i = 1; $i <= $indexi; $i++) { //remove slug and depth from range arrange unset($post_term_range['slug']); unset($post_term_range['depth']); foreach ($post_term_range as $key => $label) { // if($key != 'slug'): $all_meta_keys[] = $i . '-' . $post_child_term_slug . '-' . $key; // check for added fixed meta fields and save them too if (has_action('soya_add_extra_meta_fields_' . $post_child_term_slug)) { $all_meta_keys[] = $i . '-' . 'fixed-cost-' . $post_child_term_slug; } } } } } // Apply filters $all_meta_keys = apply_filters('soya_filter_meta_keys', $all_meta_keys, $post_terms_ids); // Sanitize user input. foreach ($all_meta_keys as $key) { //check for data if (isset($_POST[$key])) { $value = sanitize_text_field($_POST[$key]); } update_post_meta($post_id, $key, $value); } //Check if a meta key is relevant and delete them $before_post_update_post_meta_keys = $_SESSION['post_terms']; $unwanted_meta_keys = array_diff($before_post_update_post_meta_keys, $all_meta_keys); foreach ($unwanted_meta_keys as $meta_key) { delete_post_meta($post_id, $meta_key); } unset($_SESSION['post_terms']); }