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_get_field_by_key($key = '', $db_only = false) { // try JSON before DB to save query time if (!$db_only && acf_is_local_field($key)) { $field = acf_get_local_field($key); // validate $field = acf_get_valid_field($field); // return return $field; } // vars $post_id = acf_get_field_id($key); // validate if (!$post_id) { return false; } // return return _acf_get_field_by_id($post_id, $db_only); }