PodsAPI::load_pods PHP Method

load_pods() public method

$params['type'] string/array Pod Type(s) to filter by $params['object'] string/array Pod Object(s) to filter by $params['options'] array Pod Option(s) key=>value array to filter by $params['orderby'] string ORDER BY clause of query $params['limit'] string Number of Pods to return $params['where'] string WHERE clause of query $params['ids'] string|array IDs of Objects $params['count'] boolean Return only a count of Pods $params['names'] boolean Return only an array of name => label $params['ids'] boolean Return only an array of ID => label $params['fields'] boolean Return pod fields with Pods (default is true) $params['key_names'] boolean Return pods keyed by name
Since: 2.0
public load_pods ( array $params = null ) : array | mixed
$params array An associative array of parameters
return array | mixed
    public function load_pods($params = null)
    {
        $current_language = false;
        // Get current language data
        $lang_data = self::get_current_language();
        if ($lang_data) {
            if (!empty($lang_data['language'])) {
                $current_language = $lang_data['language'];
            }
        }
        $params = (object) pods_sanitize($params);
        $order = 'ASC';
        $orderby = 'menu_order title';
        $limit = -1;
        $ids = false;
        $meta_query = array();
        $cache_key = '';
        if (isset($params->type) && !empty($params->type)) {
            if (!is_array($params->type)) {
                $params->type = array(trim($params->type));
            }
            sort($params->type);
            $meta_query[] = array('key' => 'type', 'value' => $params->type, 'compare' => 'IN');
            if (0 < count($params->type)) {
                $cache_key .= '_type_' . trim(implode('_', $params->type));
            }
        }
        if (isset($params->object) && !empty($params->object)) {
            if (!is_array($params->object)) {
                $params->object = array($params->object);
            }
            $params->object = pods_trim($params->object);
            sort($params->object);
            $meta_query[] = array('key' => 'object', 'value' => $params->object, 'compare' => 'IN');
            if (1 == count($params->object)) {
                $cache_key .= '_object_' . trim(implode('', $params->object));
            }
        }
        if (isset($params->options) && !empty($params->options) && is_array($params->options)) {
            foreach ($params->options as $option => $value) {
                if (!is_array($value)) {
                    $value = array($value);
                }
                $value = pods_trim($value);
                sort($value);
                $meta_query[] = array('key' => $option, 'value' => pods_sanitize($value), 'compare' => 'IN');
            }
            $cache_key = '';
        }
        if (isset($params->where) && is_array($params->where)) {
            $meta_query = array_merge($meta_query, (array) $params->where);
        }
        if (isset($params->order) && !empty($params->order) && in_array(strtoupper($params->order), array('ASC', 'DESC'))) {
            $order = strtoupper($params->order);
        }
        if (isset($params->orderby) && !empty($params->orderby)) {
            $orderby = strtoupper($params->orderby);
        }
        if (isset($params->limit) && !empty($params->limit)) {
            $limit = pods_absint($params->limit);
        }
        if (isset($params->ids) && !empty($params->ids)) {
            $ids = $params->ids;
            if (!is_array($ids)) {
                $ids = explode(',', $ids);
            }
        }
        if (empty($ids)) {
            $ids = false;
        }
        $pre_key = '';
        if (!empty($current_language)) {
            $pre_key .= '_' . $current_language;
        }
        if (isset($params->count) && $params->count) {
            $pre_key .= '_count';
        }
        if (isset($params->ids) && $params->ids && !empty($ids)) {
            $pre_key .= '_ids_' . implode('_', $ids);
        }
        if (isset($params->names) && $params->names) {
            $pre_key .= '_names';
        } elseif (isset($params->names_ids) && $params->names_ids) {
            $pre_key .= '_names_ids';
        }
        if (isset($params->key_names) && $params->key_names) {
            $pre_key .= '_namekeys';
        }
        if (isset($params->fields) && !$params->fields) {
            $pre_key .= '_nofields';
        }
        if (isset($params->table_info) && $params->table_info) {
            $pre_key .= '_tableinfo';
        }
        $pre_key .= '_get';
        if (empty($cache_key)) {
            $cache_key = 'pods' . $pre_key . '_all';
        } else {
            $cache_key = 'pods' . $pre_key . $cache_key;
        }
        if (pods_api_cache() && !empty($cache_key) && ('pods' . (!empty($current_language) ? '_' . $current_language : '') . '_get_all' != $cache_key || empty($meta_query)) && $limit < 1 && (empty($orderby) || 'menu_order title' == $orderby) && empty($ids)) {
            $the_pods = pods_transient_get($cache_key);
            if (false === $the_pods) {
                $the_pods = pods_cache_get($cache_key, 'pods');
            }
            if (!is_array($the_pods) && 'none' == $the_pods) {
                return array();
            } elseif (false !== $the_pods) {
                return $the_pods;
            }
        }
        $the_pods = array();
        $args = array('post_type' => '_pods_pod', 'nopaging' => true, 'posts_per_page' => $limit, 'order' => $order, 'orderby' => $orderby, 'meta_query' => $meta_query);
        // Only set post__in if there are ids to filter (see https://core.trac.wordpress.org/ticket/28099)
        if (false != $ids) {
            $args['post__in'] = $ids;
        }
        $_pods = get_posts($args);
        $export_ignore = array('object_type', 'object_name', 'table', 'meta_table', 'pod_table', 'field_id', 'field_index', 'field_slug', 'field_type', 'field_parent', 'field_parent_select', 'meta_field_id', 'meta_field_index', 'meta_field_value', 'pod_field_id', 'pod_field_index', 'object_fields', 'join', 'where', 'where_default', 'orderby', 'pod', 'recurse', 'table_info', 'attributes', 'group', 'grouped', 'developer_mode', 'dependency', 'depends-on', 'excludes-on');
        $total_fields = 0;
        if (isset($params->count) && $params->count) {
            $the_pods = count($_pods);
        } else {
            foreach ($_pods as $pod) {
                if (isset($params->names) && $params->names) {
                    $the_pods[$pod->post_name] = $pod->post_title;
                } elseif (isset($params->names_ids) && $params->names_ids) {
                    $the_pods[$pod->ID] = $pod->post_name;
                } else {
                    if (isset($params->fields) && !$params->fields) {
                        $pod->fields = false;
                    }
                    $pod = $this->load_pod(array('pod' => $pod, 'table_info' => !empty($params->table_info)));
                    // Remove extra data not needed
                    if (pods_var('export', $params, false) && (!isset($params->fields) || $params->fields)) {
                        foreach ($export_ignore as $ignore) {
                            if (isset($pod[$ignore])) {
                                unset($pod[$ignore]);
                            }
                        }
                        foreach ($pod['fields'] as $field => $field_data) {
                            if (isset($pod['fields'][$field]['table_info'])) {
                                unset($pod['fields'][$field]['table_info']);
                            }
                        }
                    }
                    $total_fields += count($pod['fields']);
                    if (isset($params->key_names) && $params->key_names) {
                        $the_pods[$pod['name']] = $pod;
                    } else {
                        $the_pods[$pod['id']] = $pod;
                    }
                }
            }
        }
        if ((!function_exists('pll_current_language') || isset($params->refresh) && $params->refresh) && !empty($cache_key) && ('pods' != $cache_key || empty($meta_query)) && $limit < 1 && (empty($orderby) || 'menu_order title' == $orderby) && empty($ids)) {
            // Too many Pods can cause issues with the DB when caching is not enabled
            if (15 < count($the_pods) || 75 < count($total_fields)) {
                pods_transient_clear($cache_key);
                if (pods_api_cache()) {
                    if (empty($the_pods) && (!isset($params->count) || !$params->count)) {
                        pods_cache_set($cache_key, 'none', 'pods');
                    } else {
                        pods_cache_set($cache_key, $the_pods, 'pods');
                    }
                }
            } else {
                pods_cache_clear($cache_key, 'pods');
                if (pods_api_cache()) {
                    if (empty($the_pods) && (!isset($params->count) || !$params->count)) {
                        pods_transient_set($cache_key, 'none');
                    } else {
                        pods_transient_set($cache_key, $the_pods);
                    }
                }
            }
        }
        return $the_pods;
    }