/** * Deep clean a nested array. * * @param array $struct * @return array cleaned $struct */ function _fieldmanager_sanitize_deep($struct) { if (is_object($struct)) { $object = (array) $struct; } elseif (!is_array($struct)) { return sanitize_text_field($struct); } $new_struct = array(); foreach ($struct as $k => &$v) { $new_struct[sanitize_text_field($k)] = _fieldmanager_sanitize_deep($v); } return $new_struct; }
/** * This fires on save_post to store the revision_meta for diffing and * autosaves. * * @param int $post_id Post ID * @return void */ public function action__save_post($post_id) { if (get_post_type($post_id) != $this->post_type || defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } $meta = array(); foreach ($this->meta_fields as $key => $label) { if (isset($_POST[$key])) { $meta[$key] = _fieldmanager_sanitize_deep($_POST[$key]); } elseif ($value = get_post_meta($post_id, $key, true)) { $meta[$key] = $value; } } if (!empty($meta)) { update_post_meta($post_id, $this->revision_meta_key, $this->to_json($meta)); } }