function acf_update_field($field = false, $specific = false) { // $field must be an array if (!is_array($field)) { return false; } // validate $field = acf_get_valid_field($field); // may have been posted. Remove slashes $field = wp_unslash($field); // parse types (converts string '0' to int 0) $field = acf_parse_types($field); // clean up conditional logic keys if (!empty($field['conditional_logic'])) { // extract groups $groups = acf_extract_var($field, 'conditional_logic'); // clean array $groups = array_filter($groups); $groups = array_values($groups); // clean rules foreach (array_keys($groups) as $i) { $groups[$i] = array_filter($groups[$i]); $groups[$i] = array_values($groups[$i]); } // reset conditional logic $field['conditional_logic'] = $groups; } // parent may be a field key // - lookup parent ID if (acf_is_field_key($field['parent'])) { $field['parent'] = acf_get_field_id($field['parent']); } // filter for 3rd party customization $field = apply_filters("acf/update_field", $field); $field = apply_filters("acf/update_field/type={$field['type']}", $field); $field = apply_filters("acf/update_field/name={$field['name']}", $field); $field = apply_filters("acf/update_field/key={$field['key']}", $field); // store origional field for return $data = $field; // extract some args $extract = acf_extract_vars($data, array('ID', 'key', 'label', 'name', 'prefix', 'value', 'menu_order', 'id', 'class', 'parent', '_name', '_input', '_valid')); // serialize for DB $data = maybe_serialize($data); // save $save = array('ID' => $extract['ID'], 'post_status' => 'publish', 'post_type' => 'acf-field', 'post_title' => $extract['label'], 'post_name' => $extract['key'], 'post_excerpt' => $extract['name'], 'post_content' => $data, 'post_parent' => $extract['parent'], 'menu_order' => $extract['menu_order']); // $specific if (!empty($specific)) { // prepend ID array_unshift($specific, 'ID'); // vars $_save = $save; // reset $save = array(); // appen data foreach ($specific as $key) { $save[$key] = $_save[$key]; } } // allow fields to contain the same name add_filter('wp_unique_post_slug', 'acf_update_field_wp_unique_post_slug', 100, 6); // update the field and update the ID if ($field['ID']) { wp_update_post($save); } else { $field['ID'] = wp_insert_post($save); } // clear cache acf_delete_cache("get_field/key={$field['key']}"); // return return $field; }
function acf_parse_type($v) { // test for array if (is_array($v)) { return acf_parse_types($v); } // bail early if not string if (!is_string($v)) { return $v; } // trim $v = trim($v); // numbers if (is_numeric($v) && strval((int) $v) === $v) { $v = intval($v); } // return return $v; }
function acf_update_field_group($field_group = array()) { // validate $field_group = acf_get_valid_field_group($field_group); // may have been posted. Remove slashes $field_group = wp_unslash($field_group); // parse types (converts string '0' to int 0) $field_group = acf_parse_types($field_group); // locations may contain 'uniquid' array keys $field_group['location'] = array_values($field_group['location']); foreach ($field_group['location'] as $k => $v) { $field_group['location'][$k] = array_values($v); } // store origional field group for return $data = $field_group; // extract some args $extract = acf_extract_vars($data, array('ID', 'key', 'title', 'menu_order', 'fields', 'active')); // vars $data = maybe_serialize($data); $post_status = $extract['active'] ? 'publish' : 'acf-disabled'; // save $save = array('ID' => $extract['ID'], 'post_status' => $post_status, 'post_type' => 'acf-field-group', 'post_title' => $extract['title'], 'post_name' => $extract['key'], 'post_excerpt' => sanitize_title($extract['title']), 'post_content' => $data, 'menu_order' => $extract['menu_order']); // allow field groups to contain the same name add_filter('wp_unique_post_slug', 'acf_update_field_group_wp_unique_post_slug', 100, 6); // update the field group and update the ID if ($field_group['ID']) { wp_update_post($save); } else { $field_group['ID'] = wp_insert_post($save); } // action for 3rd party customization do_action('acf/update_field_group', $field_group); // clear cache acf_delete_cache("get_field_group/key={$field_group['key']}"); // return return $field_group; }
function acf_parse_args($args, $defaults = array()) { // parse args $args = wp_parse_args($args, $defaults); // parse types $args = acf_parse_types($args); // return return $args; }
function acf_parse_types($var) { // is value another array? if (is_array($var)) { // some keys are restricted $restricted = array('label', 'name', 'value', 'instructions', 'nonce'); // loop through $var carful not to parse any restricted keys foreach (array_keys($var) as $k) { // bail early for restricted pieces if (in_array($k, $restricted, true)) { continue; } $var[$k] = acf_parse_types($var[$k]); } } else { // string if (is_string($var)) { $var = trim($var); } // numbers if (is_numeric($var)) { // check for non numeric characters if (preg_match('/[^0-9]/', $var)) { // leave value if it contains such characters: . + - e //$value = floatval( $value ); } else { $var = intval($var); } } } // return return $var; }