Esempio n. 1
0
function acf_get_field($selector = null)
{
    // vars
    $field = false;
    $k = 'ID';
    $v = 0;
    // $post_id or $key
    if (is_numeric($selector)) {
        $v = $selector;
    } elseif (is_string($selector)) {
        if (acf_is_field_key($selector)) {
            $k = 'key';
        } else {
            $k = 'name';
        }
        $v = $selector;
    } elseif (is_object($selector)) {
        $v = $selector->ID;
    } else {
        return false;
    }
    // get cache key
    $cache_key = "load_field/{$k}={$v}";
    // get cache
    $found = false;
    $cache = wp_cache_get($cache_key, 'acf', false, $found);
    if ($found) {
        return $cache;
    }
    // get field group from ID or key
    if ($k == 'ID') {
        $field = _acf_get_field_by_id($v);
    } elseif ($k == 'name') {
        $field = _acf_get_field_by_name($v);
    } else {
        $field = _acf_get_field_by_key($v);
    }
    // filter for 3rd party customization
    $field = apply_filters('acf/load_field', $field);
    // If a field has been found, apply filters
    if ($field) {
        $field = apply_filters("acf/load_field/type={$field['type']}", $field);
        $field = apply_filters("acf/load_field/name={$field['name']}", $field);
        $field = apply_filters("acf/load_field/key={$field['key']}", $field);
    }
    // set cache
    wp_cache_set($cache_key, $field, 'acf');
    // return
    return $field;
}
Esempio n. 2
0
function acf_get_field($selector = null, $db_only = false)
{
    // vars
    $field = false;
    $type = 'ID';
    // ID
    if (is_numeric($selector)) {
        // do nothing
        // object
    } elseif (is_object($selector)) {
        $selector = $selector->ID;
        // string
    } elseif (is_string($selector)) {
        $type = acf_is_field_key($selector) ? 'key' : 'name';
        // other
    } else {
        return false;
    }
    // return early if cache is found
    $cache_key = "get_field/{$type}={$selector}";
    if (!$db_only && acf_isset_cache($cache_key)) {
        return acf_get_cache($cache_key);
    }
    // ID
    if ($type == 'ID') {
        $field = _acf_get_field_by_id($selector, $db_only);
        // key
    } elseif ($type == 'key') {
        $field = _acf_get_field_by_key($selector, $db_only);
        // name (rare case)
    } else {
        $field = _acf_get_field_by_name($selector, $db_only);
    }
    // bail early if no field
    if (!$field) {
        return false;
    }
    // validate
    $field = acf_get_valid_field($field);
    // set prefix (acf fields save with prefix 'acf')
    $field['prefix'] = 'acf';
    // bail early if db only value (no need to update cache)
    if ($db_only) {
        return $field;
    }
    // filter for 3rd party customization
    $field = apply_filters("acf/load_field", $field);
    $field = apply_filters("acf/load_field/type={$field['type']}", $field);
    $field = apply_filters("acf/load_field/name={$field['name']}", $field);
    $field = apply_filters("acf/load_field/key={$field['key']}", $field);
    // update cache
    // - Use key instead of ID for best compatibility (not all fields exist in the DB)
    $cache_key = acf_set_cache("get_field/key={$field['key']}", $field);
    // update cache reference
    // - allow cache to return if using an ID selector
    acf_set_cache_reference("get_field/ID={$field['ID']}", $cache_key);
    // return
    return $field;
}
Esempio n. 3
0
function acf_get_field($selector = null, $db_only = false)
{
    // vars
    $field = false;
    $type = 'ID';
    // is $selector an ID
    if (is_numeric($selector)) {
        // do nothing
        // is $selector a string (name|key)
    } elseif (is_string($selector)) {
        $type = acf_is_field_key($selector) ? 'key' : 'name';
        // is $selector an object
    } elseif (is_object($selector)) {
        $selector = $selector->ID;
        // selector not valid
    } else {
        return false;
    }
    // get cache key
    $cache_key = "get_field/{$type}={$selector}";
    // get cache
    if (!$db_only) {
        $found = false;
        $cache = wp_cache_get($cache_key, 'acf', false, $found);
        if ($found) {
            return $cache;
        }
    }
    // get field group from ID or key
    if ($type == 'ID') {
        $field = _acf_get_field_by_id($selector, $db_only);
    } elseif ($type == 'name') {
        $field = _acf_get_field_by_name($selector, $db_only);
    } else {
        $field = _acf_get_field_by_key($selector, $db_only);
    }
    // bail early if db only value (no need to update cache)
    if ($db_only) {
        return $field;
    }
    // filter for 3rd party customization
    if ($field) {
        $field = apply_filters("acf/load_field", $field);
        $field = apply_filters("acf/load_field/type={$field['type']}", $field);
        $field = apply_filters("acf/load_field/name={$field['name']}", $field);
        $field = apply_filters("acf/load_field/key={$field['key']}", $field);
    }
    // set cache
    wp_cache_set($cache_key, $field, 'acf');
    // return
    return $field;
}