Pods::field PHP Method

field() public method

If you are getting a field for output in a theme, most of the time you will want to use display() instead. This function will return arrays for relationship and file fields.
Since: 2.0
public field ( string | array $name, boolean $single = null, boolean $raw = false ) : mixed | null
$name string | array The field name, or an associative array of parameters
$single boolean (optional) For tableless fields, to return the whole array or the just the first item, or an associative array of parameters
$raw boolean (optional) Whether to return the raw value, or to run through the field type's display method, or an associative array of parameters
return mixed | null Value returned depends on the field type, null if the field doesn't exist, false if no value returned for tableless fields
    public function field($name, $single = null, $raw = false)
    {
        $defaults = array('name' => $name, 'orderby' => null, 'single' => $single, 'params' => null, 'in_form' => false, 'raw' => $raw, 'raw_display' => false, 'display' => false, 'get_meta' => false, 'output' => null, 'deprecated' => false, 'args' => array());
        if (is_array($name) || is_object($name)) {
            $defaults['name'] = null;
            $params = (object) array_merge($defaults, (array) $name);
        } elseif (is_array($single) || is_object($single)) {
            $defaults['single'] = null;
            $params = (object) array_merge($defaults, (array) $single);
        } elseif (is_array($raw) || is_object($raw)) {
            $defaults['raw'] = false;
            $params = (object) array_merge($defaults, (array) $raw);
        } else {
            $params = (object) $defaults;
        }
        if ($params->in_form) {
            $params->output = 'ids';
        } elseif (null === $params->output) {
            /**
             * Override the way realted fields are output
             *
             * @param string $output How to output related fields. Default is 'arrays'. Options: id|name|object|array|pod
             * @param array|object $row Current row being outputted.
             * @param array $params Params array passed to field().
             * @param object|Pods   $this Current Pods object.
             */
            $params->output = apply_filters('pods_pods_field_related_output_type', 'arrays', $this->row, $params, $this);
        }
        if (in_array($params->output, array('id', 'name', 'object', 'array', 'pod'))) {
            $params->output .= 's';
        }
        // Support old $orderby variable
        if (null !== $params->single && is_string($params->single) && empty($params->orderby)) {
            if (!class_exists('Pod') || Pod::$deprecated_notice) {
                pods_deprecated('Pods::field', '2.0', 'Use $params[ \'orderby\' ] instead');
            }
            $params->orderby = $params->single;
            $params->single = false;
        }
        if (null !== $params->single) {
            $params->single = (bool) $params->single;
        }
        $params->name = trim($params->name);
        if (is_array($params->name) || strlen($params->name) < 1) {
            return null;
        }
        $params->full_name = $params->name;
        $value = null;
        if (isset($this->row_override[$params->name])) {
            $value = $this->row_override[$params->name];
        }
        if (false === $this->row()) {
            if (false !== $this->data()) {
                $this->fetch();
            } else {
                return $value;
            }
        }
        if ($this->data->field_id == $params->name) {
            if (isset($this->row[$params->name])) {
                return $this->row[$params->name];
            } elseif (null !== $value) {
                return $value;
            }
            return 0;
        }
        $tableless_field_types = PodsForm::tableless_field_types();
        $simple_tableless_objects = PodsForm::simple_tableless_objects();
        $params->traverse = array();
        if (in_array($params->name, array('_link', 'detail_url')) || in_array($params->name, array('permalink', 'the_permalink')) && in_array($this->pod_data['type'], array('post_type', 'taxonomy', 'media', 'user', 'comment'))) {
            if (0 < strlen($this->detail_page)) {
                $value = get_home_url() . '/' . $this->do_magic_tags($this->detail_page);
            } elseif (in_array($this->pod_data['type'], array('post_type', 'media'))) {
                $value = get_permalink($this->id());
            } elseif ('taxonomy' == $this->pod_data['type']) {
                $value = get_term_link($this->id(), $this->pod_data['name']);
            } elseif ('user' == $this->pod_data['type']) {
                $value = get_author_posts_url($this->id());
            } elseif ('comment' == $this->pod_data['type']) {
                $value = get_comment_link($this->id());
            }
        }
        $field_data = $last_field_data = false;
        $field_type = false;
        $first_field = explode('.', $params->name);
        $first_field = $first_field[0];
        if (isset($this->fields[$first_field])) {
            $field_data = $this->fields[$first_field];
            $field_type = 'field';
        } elseif (!empty($this->pod_data['object_fields'])) {
            if (isset($this->pod_data['object_fields'][$first_field])) {
                $field_data = $this->pod_data['object_fields'][$first_field];
                $field_type = 'object_field';
            } else {
                foreach ($this->pod_data['object_fields'] as $object_field => $object_field_opt) {
                    if (in_array($first_field, $object_field_opt['alias'])) {
                        if ($first_field == $params->name) {
                            $params->name = $object_field;
                        }
                        $first_field = $object_field;
                        $field_data = $object_field_opt;
                        $field_type = 'object_field';
                        break;
                    }
                }
            }
        }
        // Simple fields have no other output options
        if ('pick' == $field_data['type'] && in_array($field_data['pick_object'], $simple_tableless_objects)) {
            $params->output = 'arrays';
        }
        if (empty($value) && in_array($field_data['type'], $tableless_field_types)) {
            $params->raw = true;
            $value = false;
            if ('arrays' != $params->output && isset($this->row['_' . $params->output . '_' . $params->name])) {
                $value = $this->row['_' . $params->output . '_' . $params->name];
            } elseif ('arrays' == $params->output && isset($this->row[$params->name])) {
                $value = $this->row[$params->name];
            }
            if (false !== $value && !is_array($value) && 'pick' == $field_data['type'] && in_array($field_data['pick_object'], $simple_tableless_objects)) {
                $value = PodsForm::field_method('pick', 'simple_value', $params->name, $value, $field_data, $this->pod_data, $this->id(), true);
            }
        }
        if (empty($value) && isset($this->row[$params->name]) && (!in_array($field_data['type'], $tableless_field_types) || 'arrays' == $params->output)) {
            if (empty($field_data) || in_array($field_data['type'], array('boolean', 'number', 'currency'))) {
                $params->raw = true;
            }
            if (null === $params->single) {
                if (isset($this->fields[$params->name]) && !in_array($this->fields[$params->name]['type'], $tableless_field_types)) {
                    $params->single = true;
                } else {
                    $params->single = false;
                }
            }
            $value = $this->row[$params->name];
        } elseif (empty($value)) {
            $object_field_found = false;
            if ('object_field' == $field_type) {
                $object_field_found = true;
                if (isset($this->row[$first_field])) {
                    $value = $this->row[$first_field];
                } elseif (in_array($field_data['type'], $tableless_field_types)) {
                    $this->fields[$first_field] = $field_data;
                    $object_field_found = false;
                } else {
                    return null;
                }
            }
            if ('post_type' == $this->pod_data['type'] && !isset($this->fields[$params->name])) {
                if (!isset($this->fields['post_thumbnail']) && ('post_thumbnail' == $params->name || 0 === strpos($params->name, 'post_thumbnail.'))) {
                    $size = 'thumbnail';
                    if (0 === strpos($params->name, 'post_thumbnail.')) {
                        $field_names = explode('.', $params->name);
                        if (isset($field_names[1])) {
                            $size = $field_names[1];
                        }
                    }
                    // Pods will auto-get the thumbnail ID if this isn't an attachment
                    $value = pods_image($this->id(), $size, 0, null, true);
                    $object_field_found = true;
                } elseif (!isset($this->fields['post_thumbnail_url']) && ('post_thumbnail_url' == $params->name || 0 === strpos($params->name, 'post_thumbnail_url.'))) {
                    $size = 'thumbnail';
                    if (0 === strpos($params->name, 'post_thumbnail_url.')) {
                        $field_names = explode('.', $params->name);
                        if (isset($field_names[1])) {
                            $size = $field_names[1];
                        }
                    }
                    // Pods will auto-get the thumbnail ID if this isn't an attachment
                    $value = pods_image_url($this->id(), $size, 0, true);
                    $object_field_found = true;
                } elseif (0 === strpos($params->name, 'image_attachment.')) {
                    $size = 'thumbnail';
                    $image_id = 0;
                    $field_names = explode('.', $params->name);
                    if (isset($field_names[1])) {
                        $image_id = $field_names[1];
                    }
                    if (isset($field_names[2])) {
                        $size = $field_names[2];
                    }
                    if (!empty($image_id)) {
                        $value = pods_image($image_id, $size, 0, null, true);
                        if (!empty($value)) {
                            $object_field_found = true;
                        }
                    }
                } elseif (0 === strpos($params->name, 'image_attachment_url.')) {
                    $size = 'thumbnail';
                    $image_id = 0;
                    $field_names = explode('.', $params->name);
                    if (isset($field_names[1])) {
                        $image_id = $field_names[1];
                    }
                    if (isset($field_names[2])) {
                        $size = $field_names[2];
                    }
                    if (!empty($image_id)) {
                        $value = pods_image_url($image_id, $size, 0, true);
                        if (!empty($value)) {
                            $object_field_found = true;
                        }
                    }
                }
            } elseif ('user' == $this->pod_data['type'] && !isset($this->fields[$params->name])) {
                if (!isset($this->fields['avatar']) && ('avatar' == $params->name || 0 === strpos($params->name, 'avatar.'))) {
                    $size = null;
                    if (0 === strpos($params->name, 'avatar.')) {
                        $field_names = explode('.', $params->name);
                        if (isset($field_names[1])) {
                            $size = (int) $field_names[1];
                        }
                    }
                    if (!empty($size)) {
                        $value = get_avatar($this->id(), $size);
                    } else {
                        $value = get_avatar($this->id());
                    }
                    $object_field_found = true;
                }
            } elseif (0 === strpos($params->name, 'image_attachment.')) {
                $size = 'thumbnail';
                $image_id = 0;
                $field_names = explode('.', $params->name);
                if (isset($field_names[1])) {
                    $image_id = $field_names[1];
                }
                if (isset($field_names[2])) {
                    $size = $field_names[2];
                }
                if (!empty($image_id)) {
                    $value = pods_image($image_id, $size, 0, null, true);
                    if (!empty($value)) {
                        $object_field_found = true;
                    }
                }
            } elseif (0 === strpos($params->name, 'image_attachment_url.')) {
                $size = 'thumbnail';
                $image_id = 0;
                $field_names = explode('.', $params->name);
                if (isset($field_names[1])) {
                    $image_id = $field_names[1];
                }
                if (isset($field_names[2])) {
                    $size = $field_names[2];
                }
                if (!empty($image_id)) {
                    $value = pods_image_url($image_id, $size, 0, true);
                    if (!empty($value)) {
                        $object_field_found = true;
                    }
                }
            }
            if (false === $object_field_found) {
                $params->traverse = array($params->name);
                if (false !== strpos($params->name, '.')) {
                    $params->traverse = explode('.', $params->name);
                    $params->name = $params->traverse[0];
                }
                if (isset($this->fields[$params->name]) && isset($this->fields[$params->name]['type'])) {
                    /**
                     * Modify value returned by field() after its retrieved, but before its validated or formatted
                     *
                     * Filter name is set dynamically with name of field: "pods_pods_field_{field_name}"
                     *
                     * @since unknown
                     *
                     * @param array|string|null $value Value retrieved.
                     * @param array|object $row Current row being outputted.
                     * @param array $params Params array passed to field().
                     * @param object|Pods $this Current Pods object.
                     *
                     */
                    $v = apply_filters('pods_pods_field_' . $this->fields[$params->name]['type'], null, $this->fields[$params->name], $this->row, $params, $this);
                    if (null !== $v) {
                        return $v;
                    }
                }
                $simple = false;
                $simple_data = array();
                if (isset($this->fields[$params->name])) {
                    if ('meta' == $this->pod_data['storage']) {
                        if (!in_array($this->fields[$params->name]['type'], $tableless_field_types)) {
                            $simple = true;
                        }
                    }
                    if (in_array($this->fields[$params->name]['type'], $tableless_field_types)) {
                        $params->raw = true;
                        if ('pick' == $this->fields[$params->name]['type'] && in_array($this->fields[$params->name]['pick_object'], $simple_tableless_objects)) {
                            $simple = true;
                            $params->single = true;
                        }
                    } elseif (in_array($this->fields[$params->name]['type'], array('boolean', 'number', 'currency'))) {
                        $params->raw = true;
                    }
                }
                if (!isset($this->fields[$params->name]) || !in_array($this->fields[$params->name]['type'], $tableless_field_types) || $simple) {
                    if (null === $params->single) {
                        if (isset($this->fields[$params->name]) && !in_array($this->fields[$params->name]['type'], $tableless_field_types)) {
                            $params->single = true;
                        } else {
                            $params->single = false;
                        }
                    }
                    $no_conflict = pods_no_conflict_check($this->pod_data['type']);
                    if (!$no_conflict) {
                        pods_no_conflict_on($this->pod_data['type']);
                    }
                    if (in_array($this->pod_data['type'], array('post_type', 'media', 'taxonomy', 'user', 'comment'))) {
                        $id = $this->id();
                        $metadata_type = $this->pod_data['type'];
                        if (in_array($this->pod_data['type'], array('post_type', 'media'))) {
                            $metadata_type = 'post';
                            // Support for WPML 'duplicated' translation handling
                            if (did_action('wpml_loaded') && apply_filters('wpml_is_translated_post_type', false, $this->pod_data['name'])) {
                                $master_post_id = (int) apply_filters('wpml_master_post_from_duplicate', $id);
                                if (0 < $master_post_id) {
                                    $id = $master_post_id;
                                }
                            }
                        } elseif ('taxonomy' == $this->pod_data['type']) {
                            $metadata_type = 'term';
                        }
                        $value = get_metadata($metadata_type, $id, $params->name, $params->single);
                        $single_multi = 'single';
                        if (isset($this->fields[$params->name])) {
                            $single_multi = pods_v($this->fields[$params->name]['type'] . '_format_type', $this->fields[$params->name]['options'], 'single');
                        }
                        if ($simple && !is_array($value) && 'single' != $single_multi) {
                            $value = get_metadata($metadata_type, $id, $params->name);
                        }
                    } elseif ('settings' == $this->pod_data['type']) {
                        $value = get_option($this->pod_data['name'] . '_' . $params->name, null);
                    }
                    // Handle Simple Relationships
                    if ($simple) {
                        if (null === $params->single) {
                            $params->single = false;
                        }
                        $value = PodsForm::field_method('pick', 'simple_value', $params->name, $value, $this->fields[$params->name], $this->pod_data, $this->id(), true);
                    }
                    if (!$no_conflict) {
                        pods_no_conflict_off($this->pod_data['type']);
                    }
                } else {
                    // Dot-traversal
                    $pod = $this->pod;
                    $ids = array($this->id());
                    $all_fields = array();
                    $lookup = $params->traverse;
                    // Get fields matching traversal names
                    if (!empty($lookup)) {
                        $fields = $this->api->load_fields(array('name' => $lookup, 'type' => $tableless_field_types, 'object_fields' => true));
                        if (!empty($fields)) {
                            foreach ($fields as $field) {
                                if (!empty($field)) {
                                    if (!isset($all_fields[$field['pod']])) {
                                        $all_fields[$field['pod']] = array();
                                    }
                                    $all_fields[$field['pod']][$field['name']] = $field;
                                }
                            }
                        }
                        if (!empty($this->pod_data['object_fields'])) {
                            foreach ($this->pod_data['object_fields'] as $object_field => $object_field_opt) {
                                if (in_array($object_field_opt['type'], $tableless_field_types)) {
                                    $all_fields[$this->pod][$object_field] = $object_field_opt;
                                }
                            }
                        }
                    }
                    $last_type = $last_object = $last_pick_val = '';
                    $last_options = array();
                    $single_multi = pods_v($this->fields[$params->name]['type'] . '_format_type', $this->fields[$params->name]['options'], 'single');
                    if ('multi' == $single_multi) {
                        $limit = (int) pods_v($this->fields[$params->name]['type'] . '_limit', $this->fields[$params->name]['options'], 0);
                    } else {
                        $limit = 1;
                    }
                    $last_limit = 0;
                    // Loop through each traversal level
                    foreach ($params->traverse as $key => $field) {
                        $last_loop = false;
                        if (count($params->traverse) <= $key + 1) {
                            $last_loop = true;
                        }
                        $field_exists = isset($all_fields[$pod][$field]);
                        $simple = false;
                        $last_options = array();
                        if ($field_exists && 'pick' == $all_fields[$pod][$field]['type'] && in_array($all_fields[$pod][$field]['pick_object'], $simple_tableless_objects)) {
                            $simple = true;
                            $last_options = $all_fields[$pod][$field];
                        }
                        // Tableless handler
                        if ($field_exists && (!in_array($all_fields[$pod][$field]['type'], array('pick', 'taxonomy')) || !$simple)) {
                            $type = $all_fields[$pod][$field]['type'];
                            $pick_object = $all_fields[$pod][$field]['pick_object'];
                            $pick_val = $all_fields[$pod][$field]['pick_val'];
                            if ('table' == $pick_object) {
                                $pick_val = pods_v('pick_table', $all_fields[$pod][$field]['options'], $pick_val, true);
                            } elseif ('__current__' == $pick_val) {
                                $pick_val = $pod;
                            }
                            $last_limit = 0;
                            if (in_array($type, $tableless_field_types)) {
                                $single_multi = pods_v("{$type}_format_type", $all_fields[$pod][$field]['options'], 'single');
                                if ('multi' == $single_multi) {
                                    $last_limit = (int) pods_v("{$type}_limit", $all_fields[$pod][$field]['options'], 0);
                                } else {
                                    $last_limit = 1;
                                }
                            }
                            $last_type = $type;
                            $last_object = $pick_object;
                            $last_pick_val = $pick_val;
                            $last_options = $all_fields[$pod][$field];
                            // Temporary hack until there's some better handling here
                            $last_limit = $last_limit * count($ids);
                            // Get related IDs
                            if (!isset($all_fields[$pod][$field]['pod_id'])) {
                                $all_fields[$pod][$field]['pod_id'] = 0;
                            }
                            if (isset($all_fields[$pod][$field]['id'])) {
                                $ids = $this->api->lookup_related_items($all_fields[$pod][$field]['id'], $all_fields[$pod][$field]['pod_id'], $ids, $all_fields[$pod][$field]);
                            }
                            // No items found
                            if (empty($ids)) {
                                return false;
                            } elseif (0 < $last_limit) {
                                $ids = array_slice($ids, 0, $last_limit);
                            }
                            // Get $pod if related to a Pod
                            if (!empty($pick_object) && (!empty($pick_val) || in_array($pick_object, array('user', 'media', 'comment')))) {
                                if ('pod' == $pick_object) {
                                    $pod = $pick_val;
                                } else {
                                    $check = $this->api->get_table_info($pick_object, $pick_val);
                                    if (!empty($check) && !empty($check['pod'])) {
                                        $pod = $check['pod']['name'];
                                    }
                                }
                            }
                        } else {
                            // Invalid field
                            if (0 == $key) {
                                return false;
                            }
                            $last_loop = true;
                        }
                        if ($last_loop) {
                            $object_type = $last_object;
                            $object = $last_pick_val;
                            if (in_array($last_type, PodsForm::file_field_types())) {
                                $object_type = 'media';
                                $object = 'attachment';
                            }
                            $data = array();
                            $table = $this->api->get_table_info($object_type, $object, null, null, $last_options);
                            $join = $where = array();
                            if (!empty($table['join'])) {
                                $join = (array) $table['join'];
                            }
                            if (!empty($table['where']) || !empty($ids)) {
                                foreach ($ids as $id) {
                                    $where[$id] = '`t`.`' . $table['field_id'] . '` = ' . (int) $id;
                                }
                                if (!empty($where)) {
                                    $where = array(implode(' OR ', $where));
                                }
                                if (!empty($table['where'])) {
                                    $where = array_merge($where, array_values((array) $table['where']));
                                }
                            }
                            /**
                             * @var $related_obj Pods
                             */
                            $related_obj = false;
                            if ('pod' == $object_type) {
                                $related_obj = pods($object, null, false);
                            } elseif (!empty($table['pod'])) {
                                $related_obj = pods($table['pod']['name'], null, false);
                            }
                            if (!empty($table['table']) || !empty($related_obj)) {
                                $sql = array('select' => '*, `t`.`' . $table['field_id'] . '` AS `pod_item_id`', 'table' => $table['table'], 'join' => $join, 'where' => $where, 'orderby' => $params->orderby, 'pagination' => false, 'search' => false, 'limit' => -1, 'expires' => 180);
                                // Output types
                                if (in_array($params->output, array('ids', 'objects', 'pods'))) {
                                    $sql['select'] = '`t`.`' . $table['field_id'] . '` AS `pod_item_id`';
                                } elseif ('names' == $params->output && !empty($table['field_index'])) {
                                    $sql['select'] = '`t`.`' . $table['field_index'] . '` AS `pod_item_index`, `t`.`' . $table['field_id'] . '` AS `pod_item_id`';
                                }
                                if (!empty($params->params) && is_array($params->params)) {
                                    $where = $sql['where'];
                                    $sql = array_merge($sql, $params->params);
                                    if (isset($params->params['where'])) {
                                        $sql['where'] = array_merge((array) $where, (array) $params->params['where']);
                                    }
                                }
                                if (empty($related_obj)) {
                                    if (!is_object($this->alt_data)) {
                                        $this->alt_data = pods_data(null, 0, true, true);
                                    }
                                    $item_data = $this->alt_data->select($sql);
                                } else {
                                    $item_data = $related_obj->find($sql)->data();
                                }
                                $items = array();
                                if (!empty($item_data)) {
                                    foreach ($item_data as $item) {
                                        if (is_array($item)) {
                                            $item = (object) $item;
                                        }
                                        if (empty($item->pod_item_id)) {
                                            continue;
                                        }
                                        // Bypass pass field
                                        if (isset($item->user_pass)) {
                                            unset($item->user_pass);
                                        }
                                        // Get Item ID
                                        $item_id = $item->pod_item_id;
                                        // Output types
                                        if ('ids' == $params->output) {
                                            $item = (int) $item_id;
                                        } elseif ('names' == $params->output && !empty($table['field_index'])) {
                                            $item = $item->pod_item_index;
                                        } elseif ('objects' == $params->output) {
                                            if (in_array($object_type, array('post_type', 'media'))) {
                                                $item = get_post($item_id);
                                            } elseif ('taxonomy' == $object_type) {
                                                $item = get_term($item_id, $object);
                                            } elseif ('user' == $object_type) {
                                                $item = get_userdata($item_id);
                                                if (!empty($item)) {
                                                    // Get other vars
                                                    $roles = $item->roles;
                                                    $caps = $item->caps;
                                                    $allcaps = $item->allcaps;
                                                    $item = $item->data;
                                                    // Set other vars
                                                    $item->roles = $roles;
                                                    $item->caps = $caps;
                                                    $item->allcaps = $allcaps;
                                                    unset($item->user_pass);
                                                }
                                            } elseif ('comment' == $object_type) {
                                                $item = get_comment($item_id);
                                            } else {
                                                $item = (object) $item;
                                            }
                                        } elseif ('pods' == $params->output) {
                                            if (in_array($object_type, array('user', 'media'))) {
                                                $item = pods($object_type, (int) $item_id);
                                            } else {
                                                $item = pods($object, (int) $item_id);
                                            }
                                        } else {
                                            // arrays
                                            $item = get_object_vars((object) $item);
                                        }
                                        // Pass item data into $data
                                        $items[$item_id] = $item;
                                    }
                                    // Cleanup
                                    unset($item_data);
                                    // Return all of the data in the order expected
                                    if (empty($params->orderby)) {
                                        foreach ($ids as $id) {
                                            if (isset($items[$id])) {
                                                $data[$id] = $items[$id];
                                            }
                                        }
                                    } else {
                                        // Use order set by orderby
                                        foreach ($items as $id => $v) {
                                            if (in_array($id, $ids)) {
                                                $data[$id] = $v;
                                            }
                                        }
                                    }
                                }
                            }
                            if (in_array($last_type, $tableless_field_types) || in_array($last_type, array('boolean', 'number', 'currency'))) {
                                $params->raw = true;
                            }
                            if (empty($data)) {
                                $value = false;
                            } else {
                                $object_type = $table['type'];
                                if (in_array($table['type'], array('post_type', 'attachment', 'media'))) {
                                    $object_type = 'post';
                                }
                                $no_conflict = true;
                                if (in_array($object_type, array('post', 'taxonomy', 'user', 'comment', 'settings'))) {
                                    $no_conflict = pods_no_conflict_check($object_type);
                                    if (!$no_conflict) {
                                        pods_no_conflict_on($object_type);
                                    }
                                }
                                // Return entire array
                                if (false !== $field_exists && (in_array($last_type, $tableless_field_types) && !$simple)) {
                                    $value = $data;
                                } else {
                                    $value = array();
                                    foreach ($data as $item_id => $item) {
                                        // $field is 123x123, needs to be _src.123x123
                                        $full_field = implode('.', array_splice($params->traverse, $key));
                                        if (is_array($item) && isset($item[$field])) {
                                            if ($table['field_id'] == $field) {
                                                $value[] = (int) $item[$field];
                                            } else {
                                                $value[] = $item[$field];
                                            }
                                        } elseif (is_object($item) && isset($item->{$field})) {
                                            if ($table['field_id'] == $field) {
                                                $value[] = (int) $item->{$field};
                                            } else {
                                                $value[] = $item->{$field};
                                            }
                                        } elseif ((false !== strpos($full_field, '_src') || 'guid' == $field) && (in_array($table['type'], array('attachment', 'media')) || in_array($last_type, PodsForm::file_field_types())) || (in_array($field, array('_link', 'detail_url')) || in_array($field, array('permalink', 'the_permalink')) && in_array($last_type, PodsForm::file_field_types()))) {
                                            $size = 'full';
                                            if (false !== strpos($full_field, '_src.') && 5 < strlen($full_field)) {
                                                $size = substr($full_field, 5);
                                            } elseif (false !== strpos($full_field, '_src_relative.') && 14 < strlen($full_field)) {
                                                $size = substr($full_field, 14);
                                            } elseif (false !== strpos($full_field, '_src_schemeless.') && 16 < strlen($full_field)) {
                                                $size = substr($full_field, 16);
                                            }
                                            $value_url = pods_image_url($item_id, $size);
                                            if (false !== strpos($full_field, '_src_relative') && !empty($value_url)) {
                                                $value_url_parsed = parse_url($value_url);
                                                $value_url = $value_url_parsed['path'];
                                            } elseif (false !== strpos($full_field, '_src_schemeless') && !empty($value_url)) {
                                                $value_url = str_replace(array('http://', 'https://'), '//', $value_url);
                                            }
                                            if (!empty($value_url)) {
                                                $value[] = $value_url;
                                            }
                                            $params->raw_display = true;
                                        } elseif (false !== strpos($full_field, '_img') && (in_array($table['type'], array('attachment', 'media')) || in_array($last_type, PodsForm::file_field_types()))) {
                                            $size = 'full';
                                            if (false !== strpos($full_field, '_img.') && 5 < strlen($full_field)) {
                                                $size = substr($full_field, 5);
                                            }
                                            $value[] = pods_image($item_id, $size);
                                            $params->raw_display = true;
                                        } elseif (in_array($field, array('_link', 'detail_url')) || in_array($field, array('permalink', 'the_permalink'))) {
                                            if ('pod' == $object_type) {
                                                if (is_object($related_obj)) {
                                                    $related_obj->fetch($item_id);
                                                    $value[] = $related_obj->field('detail_url');
                                                } else {
                                                    $value[] = '';
                                                }
                                            } elseif ('post' == $object_type) {
                                                $value[] = get_permalink($item_id);
                                            } elseif ('taxonomy' == $object_type) {
                                                $value[] = get_term_link($item_id, $object);
                                            } elseif ('user' == $object_type) {
                                                $value[] = get_author_posts_url($item_id);
                                            } elseif ('comment' == $object_type) {
                                                $value[] = get_comment_link($item_id);
                                            } else {
                                                $value[] = '';
                                            }
                                            $params->raw_display = true;
                                        } elseif (in_array($object_type, array('post', 'taxonomy', 'user', 'comment'))) {
                                            $metadata_object_id = $item_id;
                                            $metadata_type = $object_type;
                                            if ('post' == $object_type) {
                                                // Support for WPML 'duplicated' translation handling
                                                if (did_action('wpml_loaded') && apply_filters('wpml_is_translated_post_type', false, $object)) {
                                                    $master_post_id = (int) apply_filters('wpml_master_post_from_duplicate', $metadata_object_id);
                                                    if (0 < $master_post_id) {
                                                        $metadata_object_id = $master_post_id;
                                                    }
                                                }
                                            } elseif ('taxonomy' == $object_type) {
                                                $metadata_type = 'term';
                                            }
                                            $value[] = get_metadata($metadata_type, $metadata_object_id, $field, true);
                                        } elseif ('settings' == $object_type) {
                                            $value[] = get_option($object . '_' . $field);
                                        }
                                    }
                                }
                                if (in_array($object_type, array('post', 'taxonomy', 'user', 'comment', 'settings')) && !$no_conflict) {
                                    pods_no_conflict_off($object_type);
                                }
                                // Handle Simple Relationships
                                if ($simple) {
                                    if (null === $params->single) {
                                        $params->single = false;
                                    }
                                    $value = PodsForm::field_method('pick', 'simple_value', $field, $value, $last_options, $all_fields[$pod], 0, true);
                                } elseif (false === $params->in_form && !empty($value)) {
                                    $value = array_values($value);
                                }
                                // Return a single column value
                                if (false === $params->in_form && 1 == $limit && !empty($value) && is_array($value) && 1 == count($value)) {
                                    $value = current($value);
                                }
                            }
                            if ($last_options) {
                                $last_field_data = $last_options;
                            }
                            break;
                        }
                    }
                }
            }
        }
        if (!empty($params->traverse) && 1 < count($params->traverse)) {
            $field_names = implode('.', $params->traverse);
            $this->row[$field_names] = $value;
        } elseif ('arrays' != $params->output && in_array($field_data['type'], $tableless_field_types)) {
            $this->row['_' . $params->output . '_' . $params->full_name] = $value;
        } elseif ('arrays' == $params->output || !in_array($field_data['type'], $tableless_field_types)) {
            $this->row[$params->full_name] = $value;
        }
        if ($params->single && is_array($value) && 1 == count($value)) {
            $value = current($value);
        }
        if (!empty($last_field_data)) {
            $field_data = $last_field_data;
        }
        // @todo Expand this into traversed fields too
        if (!empty($field_data) && ($params->display || !$params->raw) && !$params->in_form && !$params->raw_display) {
            if ($params->display || ($params->get_meta || $params->deprecated) && !in_array($field_data['type'], $tableless_field_types)) {
                $field_data['options'] = pods_var_raw('options', $field_data, array(), null, true);
                $post_temp = false;
                if ('post_type' == pods_v('type', $this->pod_data) && 0 < $this->id() && (!isset($GLOBALS['post']) || empty($GLOBALS['post']))) {
                    global $post_ID, $post;
                    $post_temp = true;
                    $old_post = $GLOBALS['post'];
                    $old_ID = $GLOBALS['post_ID'];
                    $post = get_post($this->id());
                    $post_ID = $this->id();
                }
                $filter = pods_var_raw('display_filter', $field_data['options']);
                if (0 < strlen($filter)) {
                    $args = array($filter, $value);
                    $filter_args = pods_var_raw('display_filter_args', $field_data['options']);
                    if (!empty($filter_args)) {
                        $args = array_merge($args, compact($filter_args));
                    }
                    $value = call_user_func_array('apply_filters', $args);
                } elseif (1 == pods_v('display_process', $field_data['options'], 1)) {
                    $value = PodsForm::display($field_data['type'], $value, $params->name, array_merge($field_data, $field_data['options']), $this->pod_data, $this->id());
                }
                if ($post_temp) {
                    $post = $old_post;
                    $post_ID = $old_ID;
                }
            } else {
                $value = PodsForm::value($field_data['type'], $value, $params->name, array_merge($field_data, $field_data['options']), $this->pod_data, $this->id());
            }
        }
        /**
         * Modify value returned by field() directly before output.
         *
         * Will not run if value was null
         *
         * @since unknown
         *
         * @param array|string|null $value Value to be returned.
         * @param array|object $row Current row being outputted.
         * @param array $params Params array passed to field().
         * @param object|Pods $this Current Pods object.
         *
         */
        $value = apply_filters('pods_pods_field', $value, $this->row, $params, $this);
        return $value;
    }

Usage Example

Example #1
0
 /**
  * Get an offset if already set or traverse Pod and then set plus reutrn.
  *
  * @since 0.1.0
  *
  * @param mixed $offset Offset to get
  *
  * @return mixed
  */
 public function offsetGet($offset)
 {
     if ($this->offsetExists($offset)) {
         return parent::offsetGet($offset);
     } else {
         if ('id' == $offset || 'ID' == $offset) {
             $_value = $this->pod->id();
         } else {
             $_value = $this->pod->field($offset);
         }
         if ($_value) {
             parent::offsetSet($offset, $_value);
             return $_value;
         }
     }
 }
All Usage Examples Of Pods::field