PodsAPI::load_field PHP Method

load_field() public method

$params['pod_id'] int The Pod ID $params['pod'] string The Pod name $params['id'] int The field ID $params['name'] string The field name $params['table_info'] boolean Whether to lookup a pick field's table info
Since: 1.7.9
public load_field ( array $params, boolean $strict = false ) : array | boolean
$params array An associative array of parameters
$strict boolean Whether to require a field exist or not when loading the info
return array | boolean Array with field data, false if field not found
    public function load_field($params, $strict = false)
    {
        $params = (object) $params;
        if (!isset($params->table_info)) {
            $params->table_info = false;
        }
        $pod = array();
        $field = array();
        if (isset($params->post_title)) {
            $_field = $params;
        } elseif (isset($params->id) && !empty($params->id)) {
            $_field = get_post($dumb = (int) $params->id);
        } else {
            if (!isset($params->pod)) {
                $params->pod = '';
            }
            if (!isset($params->pod_id)) {
                $params->pod_id = 0;
            }
            if (isset($params->pod_data)) {
                $pod = $params->pod_data;
            } else {
                $pod = $this->load_pod(array('name' => $params->pod, 'id' => $params->pod_id, 'table_info' => false), false);
                if (false === $pod) {
                    if ($strict) {
                        return pods_error(__('Pod not found', 'pods'), $this);
                    }
                    return false;
                }
            }
            $params->pod_id = $pod['id'];
            $params->pod = $pod['name'];
            if (empty($params->name) && empty($params->pod) && empty($params->pod_id)) {
                return pods_error(__('Either Field Name or Field ID / Pod ID are required', 'pods'), $this);
            }
            $params->name = pods_clean_name($params->name, true, 'meta' == $pod['storage'] ? false : true);
            if (isset($pod['fields'][$params->name]) && isset($pod['fields'][$params->name]['id'])) {
                return $pod['fields'][$params->name];
            }
            $field = false;
            if (pods_api_cache()) {
                $field = pods_transient_get('pods_field_' . $params->pod . '_' . $params->name);
            }
            if (empty($field)) {
                $field = get_posts(array('name' => $params->name, 'post_type' => '_pods_field', 'posts_per_page' => 1, 'post_parent' => $params->pod_id));
                if (empty($field)) {
                    if ($strict) {
                        return pods_error(__('Field not found', 'pods'), $this);
                    }
                    return false;
                }
                $_field = $field[0];
                $field = array();
            }
        }
        if (empty($_field)) {
            if ($strict) {
                return pods_error(__('Field not found', 'pods'), $this);
            }
            return false;
        }
        $_field = get_object_vars($_field);
        if (!isset($pod['name']) && !isset($_field['pod'])) {
            if (0 < $_field['post_parent']) {
                $pod = $this->load_pod(array('id' => $_field['post_parent'], 'table_info' => false), false);
            }
            if (empty($pod)) {
                if ($strict) {
                    return pods_error(__('Pod for field not found', 'pods'), $this);
                }
                return false;
            }
        }
        if (empty($field)) {
            if (pods_api_cache() && (isset($pod['name']) || isset($_field['pod']))) {
                $field = pods_transient_get('pods_field_' . pods_var('name', $pod, pods_var('pod', $_field), null, true) . '_' . $_field['post_name']);
            }
            if (empty($field)) {
                $defaults = array('type' => 'text');
                $field = array('id' => $_field['ID'], 'name' => $_field['post_name'], 'label' => $_field['post_title'], 'description' => $_field['post_content'], 'weight' => $_field['menu_order'], 'pod_id' => $_field['post_parent'], 'pick_object' => '', 'pick_val' => '', 'sister_id' => '', 'table_info' => array());
                if (isset($pod['name'])) {
                    $field['pod'] = $pod['name'];
                } elseif (isset($_field['pod'])) {
                    $field['pod'] = $_field['pod'];
                }
                $field['options'] = get_post_meta($field['id']);
                $options_ignore = array('method', 'table_info', 'attributes', 'group', 'grouped', 'developer_mode', 'dependency', 'depends-on', 'excludes-on');
                foreach ($options_ignore as $ignore) {
                    if (isset($field['options'][$ignore])) {
                        unset($field['options'][$ignore]);
                    }
                }
                foreach ($field['options'] as $option => $value) {
                    if (is_array($value)) {
                        foreach ($value as $k => $v) {
                            if (!is_array($v)) {
                                $value[$k] = maybe_unserialize($v);
                            }
                        }
                        if (1 == count($value)) {
                            $value = current($value);
                        }
                    } else {
                        $value = maybe_unserialize($value);
                    }
                    $field['options'][$option] = $value;
                }
                $field['options'] = array_merge($defaults, $field['options']);
                $field['type'] = $field['options']['type'];
                unset($field['options']['type']);
                if (isset($field['options']['pick_object'])) {
                    $field['pick_object'] = $field['options']['pick_object'];
                    unset($field['options']['pick_object']);
                }
                if (isset($field['options']['pick_val'])) {
                    $field['pick_val'] = $field['options']['pick_val'];
                    unset($field['options']['pick_val']);
                }
                if (isset($field['options']['sister_id'])) {
                    $field['sister_id'] = $field['options']['sister_id'];
                    unset($field['options']['sister_id']);
                }
                if (isset($field['options']['sister_field_id'])) {
                    unset($field['options']['sister_field_id']);
                }
                if (pods_api_cache() && (isset($pod['name']) || isset($_field['pod']))) {
                    pods_transient_set('pods_field_' . pods_var('name', $pod, pods_var('pod', $_field), null, true) . '_' . $field['name'], $field);
                }
            }
        }
        $field['table_info'] = array();
        if ('pick' == $field['type'] && $params->table_info) {
            $field['table_info'] = $this->get_table_info($field['pick_object'], $field['pick_val'], null, null, $field);
        }
        return $field;
    }