Подтвердить что ты не робот

Meta_query, как искать, используя оба отношения OR & AND?

Решено: см. ответ ниже.


У меня есть пользовательский тип сообщения, КНИГИ. Он имеет несколько настраиваемых полей, а именно: TITLE, AUTHOR, GENRE, RATING. Как исправить мой код meta_query ниже, чтобы только книги, в которых есть слово поиска в пользовательских полях; название, автор, жанр; С ТОЧНОСТЬЮ рейтинг, указанный в моей форме поиска, отображается в результатах?

Я создал специальную форму поиска; текстовую область, которая будет искать по названию, автору и жанру; и раскрывающийся список, который будет искать рейтинг. Meta_query, который я сделал ниже, просматривает только название, автор и жанр. Но теперь я не понимаю, как добавить код для рейтинга.

Вот как я визуально представлял это с отношением meta_query: (название ИЛИ автор ИЛИ жанр) И рейтинг

$args = array(
        'relation' => 'OR',
          array(
             'key' => 'title',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
          array(
             'key' => 'author',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
          array(
             'key' => 'genre',
             'value' => $searchvalue,
             'compare' => 'LIKE'
          );
), 
        array(
        'relation' => 'AND', 
          array(
             'key' => 'rating',
             'value' => $ratingvalue,
             'compare' => '=',
             'type' => 'NUMERIC'
          ));

Я очень благодарен за вашу помощь и советы.

4b9b3361

Ответ 1

Я нашел решение с некоторой помощью. Код ниже работал отлично.

    $args => array(
        'relation' => 'AND',
        array(
            'relation' => 'OR',
            array(
                'key' => 'title',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'author',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'genre',
                'value' => $searchvalue,
                'compare' => 'LIKE'
            )
        ),
        array(
            'key' => 'rating',
            'value' => $ratingvalue,
            'compare' => '=',
            'type' => 'NUMERIC'

        )
    )
);

Ответ 2

После нескольких проб и ошибок я нахожу решение этого. Это логично, я имею в виду, что meta_query не поддерживает массив для "ключа" поля, но давая массив в "ключ", я получаю идеальное решение. Я могу быть сумасшедшим, но он работает как шарм.

$args => array(
    'relation' => 'AND',
    array(
        'key' => array('title','author','genre',),
        'value' => $searchvalue,
        'compare' => '='
    ),
    array(
        'key' => 'rating',
        'value' => $ratingvalue,
        'compare' => '=',
        'type' => 'NUMERIC'

    )
)

Вы получите предупреждение только для "trim()", поскольку мы передаем массив вместо строки. Подавите это предупреждение или добавьте что-нибудь, если найдете лучшее решение.