WordPress изменить мета-запрос - PullRequest
0 голосов
/ 14 мая 2018

У меня есть цикл в functions.php с этим кодом:

$meta_query[] = array(
                'key'       => '$key',
                'value'     => $value,
                'compare'   => 'IN',
            );  

, и я пытаюсь добавить следующий $ meta_query после цикла, но с "<" в сравнении.Когда я добавляю 'IN', он работает, но когда я изменяю на '> = "или"> ", он не работает.

  $meta_query[] = array(
                'key'       => 'price',
                'value'     => $value,
                'compare'   => '>=',
            );

Знаете ли вы, почему?

Это мойполный код:

// array of filters (field key => field name)
    $GLOBALS['my_query_filters'] = array( 
        'field_1'   => 'type', 
        'field_2'   => 'price',
        'field_3'   => 'type2',
        'field_4'   => 'city',
        'field_5'   => 'price_min',
        'field_6'   => 'price_max',
    );
    function my_pre_get_posts( $query ) {
        global $post;
        global $wpdb;
        $parametry = get_field_objects($post->ID);
        if(!is_single() && $post->ID != 2 && $query->get( 'cat' )){
            /* start filter*/
            $meta_query = $query->get('meta_query');
            foreach( $GLOBALS['my_query_filters'] as $key => $name ) {
                // continue if not found in url
                if( empty($_GET[ $name ]) ) {
                    continue;
                }

                // get the value for this filter
                // eg: http://www.website.com/events?city=melbourne,sydney
                $value = explode(',', $_GET[ $name ]);
                // append meta query

                if($name == 'price_min'){
                    $meta_query[] = array(
                        'key'       => 'price',
                        'value'     => $value,
                        'compare'   => '>=',
                    );  
                }
                elseif($name == 'price_max'){
                    $meta_query[] = array(
                        'key'       => 'price',
                        'value'     => $value,
                        'compare'   => '<=',
                    );  
                }
                else{
                    $meta_query[] = array(
                        'key'       => $name,
                        'value'     => $value,
                        'compare'   => 'IN',
                    );  
                }


            } 
            // update meta query
            $query->set('meta_query', $meta_query); 

В URL (и в таблице wp_postmeta) у меня есть: type, type2, price и city. У меня нет price_min и price_max, поэтому я хочу работать с полем price.

Это мой рабочий массив после фильтрации:

Array ( [0] => Array ( [key] => type [value] => Array ( [0] => flat) [compare] => IN ) [1] => Array ( [key] => city[value] => Array ( [0] => Cracow) [compare] => IN ) )

, и это не рабочий массив, когда я добавляю price_min и price_max:

Array ( [0] => Array ( [key] => type [value] => Array ( [0] => flat) [compare] => IN ) [1] => Array ( [key] => city [value] => Array ( [0] => Cracow) [compare] => IN ) [2] => Array ( [key] => price [value] => Array ( [0] => 50000 ) [compare] => >= ) [3] => Array ( [key] => price [value] => Array ( [0] => 300000 ) [compare] => <= ) )

1 Ответ

0 голосов
/ 14 мая 2018

Вероятно, что $value не является целым числом, поэтому попытка сравнить его значение как целое, когда это строка, может вызвать некоторые проблемы. Перед вашими WP_Query аргументами поместите этот код в ваш файл:

$value = (int) $value;

Посмотрите на жонглирование типов в PHP для получения дополнительной информации.

Это документация для WP_Query мета-сравнений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...