function handle($user_id) { if (!isset($_POST[$this->nonce]) || !wp_verify_nonce($_POST[$this->nonce], $this->nonce_action)) { return $user_id; } $fields = $this->fields(); if (empty($fields)) { return; } foreach (dp_field_options($fields) as $name => $field) { $meta_value = get_user_meta($user_id, $name, true); $new_meta_value = $_POST[$name]; if (is_array($new_meta_value)) { $new_meta_value = array_filter($new_meta_value); } elseif ($field['type'] == 'password') { $new_meta_value = md5($new_meta_vlue); } if ($new_meta_value && empty($meta_value)) { add_user_meta($user_id, $name, $new_meta_value, true); } elseif ($new_meta_value && $new_meta_value != $meta_value) { update_user_meta($user_id, $name, $new_meta_value); } elseif (empty($new_meta_value) && $meta_value) { delete_user_meta($user_id, $name, $meta_value); } } }
function dp_field_options($fields = array()) { $options = array(); foreach ($fields as $field) { global $post; if (!empty($field['fields']) && $field['type'] == 'fields') { $options = array_merge_recursive($options, dp_field_options($field['fields'])); } else { if (empty($field['name'])) { continue; } $name = $field['name']; $name = str_replace('[]', '', $name); $name = str_replace(']', '', $name); $name = explode('[', $name); $option = array(); for ($i = count($name) - 1; $i >= 0; $i--) { if ($i == count($name) - 1) { $option[$name[$i]] = isset($field['value']) ? $field['value'] : ''; } else { $option[$name[$i]] = $option; // $option[$name[$i]] = array( $name[$i+1] => $option[$name[$i+1]] ); unset($option[$name[$i + 1]]); } } $options = array_merge_recursive($options, $option); } } return $options; }