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;
}
Example #2
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}