Wallmander\ElasticsearchIndexer\Model\Query\WpConverter::argMetaQuery PHP Method

argMetaQuery() public static method

public static argMetaQuery ( Query $query, $value, &$q )
$query Wallmander\ElasticsearchIndexer\Model\Query
    public static function argMetaQuery(Query $query, $value, &$q)
    {
        $currentValue = $value;
        $function = function (Query $query) use(&$currentValue, &$function) {
            foreach ($currentValue as $key => $mq) {
                if ($key === 'relation') {
                    continue;
                }
                if (!isset($mq[0]) || !is_array($mq[0])) {
                    // not nested
                    if (empty($mq['compare']) || $mq['compare'] == '=') {
                        $compare = 'in';
                        // ”=” is handled as ”in” in meta query
                    } else {
                        $compare = $mq['compare'];
                    }
                    $value = $mq['value'];
                    $type = !empty($mq['type']) ? strtolower($mq['type']) : 'char';
                    switch ($type) {
                        case 'numeric':
                            $query->where("post_meta_num.{$mq['key']}", $compare, $value);
                            break;
                        case 'char':
                        default:
                            $query->where("post_meta.{$mq['key']}.raw", $compare, $value);
                            break;
                    }
                } else {
                    // nested
                    $currentValue = $mq;
                    $query->bool($function, !empty($currentValue['relation']) ? $currentValue['relation'] : 'and');
                }
            }
        };
        $query->bool($function, !empty($value['relation']) ? $value['relation'] : 'and');
    }