PodsRESTHandlers::get_handler PHP Method

get_handler() public static method

Handler for getting custom field data.
Since: 2.5.6
public static get_handler ( array $object, string $field_name, WP_REST_Request $request, string $object_type ) : mixed
$object array The object from the response
$field_name string Name of field
$request WP_REST_Request Current request
$object_type string Type of object
return mixed
    public static function get_handler($object, $field_name, $request, $object_type)
    {
        $pod_name = pods_v('type', $object);
        /**
         * If $pod_name in the line above is empty then the route invoked
         * may be for a taxonomy, so lets try and check for that
         *
         */
        if (empty($pod_name)) {
            $pod_name = pods_v('taxonomy', $object);
        }
        /**
         * $pod_name is still empty, so check lets check $object_type
         *
         */
        if (empty($pod_name)) {
            if ('attachment' == $object_type) {
                $pod_name = 'media';
            } else {
                $pod_name = $object_type;
            }
        }
        /**
         * Filter the pod name
         *
         * @since 2.6.7
         *
         * @param array           $pod_name    Pod name
         * @param Pods            $object      Rest object
         * @param string          $field_name  Name of the field
         * @param WP_REST_Request $request     Current request
         * @param string          $object_type Rest Object type
         */
        $pod_name = apply_filters('pods_rest_api_pod_name', $pod_name, $object, $field_name, $request, $object_type);
        $id = pods_v('id', $object);
        if (empty($id)) {
            $id = pods_v('ID', $object);
        }
        $pod = self::get_pod($pod_name, $id);
        $value = false;
        if ($pod && PodsRESTFields::field_allowed_to_extend($field_name, $pod, 'read')) {
            $params = null;
            $field_data = $pod->fields($field_name);
            if ('pick' == pods_v('type', $field_data)) {
                $output_type = pods_v('rest_pick_response', $field_data['options'], 'array');
                if ('array' == $output_type) {
                    $related_pod_items = $pod->field($field_name, array('output' => 'pod'));
                    if ($related_pod_items) {
                        $fields = false;
                        $items = array();
                        $depth = pods_v('rest_pick_depth', $field_data['options'], 2);
                        if (!is_array($related_pod_items)) {
                            $related_pod_items = array($related_pod_items);
                        }
                        /**
                         * @var $related_pod Pods
                         */
                        foreach ($related_pod_items as $related_pod) {
                            if (!is_object($related_pod) || !is_a($related_pod, 'Pods')) {
                                $items = $related_pod_items;
                                break;
                            }
                            if (false === $fields) {
                                $fields = $related_pod->fields();
                                $fields = array_keys($fields);
                                if (isset($related_pod->pod_data['object_fields']) && !empty($related_pod->pod_data['object_fields'])) {
                                    $fields = array_merge($fields, array_keys($related_pod->pod_data['object_fields']));
                                }
                                /**
                                 * What fields to show in a related field REST response.
                                 *
                                 * @since 0.0.1
                                 *
                                 * @param array                  $fields     The fields to show
                                 * @param string                 $field_name The name of the field
                                 * @param object|Pods            $pod        The Pods object for Pod relationship is from.
                                 * @param object|Pods            $pod        The Pods object for Pod relationship is to.
                                 * @param int                    $id         Current item ID
                                 * @param object|WP_REST_Request Current     request object.
                                 */
                                $fields = apply_filters('pods_rest_api_fields_for_relationship_response', $fields, $field_name, $pod, $related_pod, $id, $request);
                            }
                            /**
                             * What depth to use for a related field REST response.
                             *
                             * @since 0.0.1
                             *
                             * @param array                  $depth      The depth.
                             * @param string                 $field_name The name of the field
                             * @param object|Pods            $pod        The Pods object for Pod relationship is from.
                             * @param object|Pods            $pod        The Pods object for Pod relationship is to.
                             * @param int                    $id         Current item ID
                             * @param object|WP_REST_Request Current     request object.
                             */
                            $depth = apply_filters('pods_rest_api_depth_for_relationship_response', $depth, $field_name, $pod, $related_pod, $id, $request);
                            $params = array('fields' => $fields, 'depth' => $depth);
                            $items[] = $related_pod->export($params);
                        }
                        $value = $items;
                    }
                }
                $params = array('output' => $output_type);
            }
            // If no value set yet, get normal field value
            if (!$value && !is_array($value)) {
                $value = $pod->field($field_name, $params);
            }
        }
        return $value;
    }