В чем разница между RELATION "AND" и "OR" в TAX_QUERY?

31 июл. 2013 г., 15:36:24
Просмотры: 23.2K
Голосов: 3

Потому что если я использую:

'relation' => 'AND'

или

'relation' => 'OR'

результаты всегда одинаковые. Почему?

0
Все ответы на вопрос 2
1

tax_query — это двумерный массив, где каждый вложенный массив представляет собой таксономический запрос, обычно следующего вида:

array(
  'taxonomy' => 'people',
  'field' => 'slug',
  'terms' => 'bob'
)

(например, записи, содержащие термин со слагом 'bob' из таксономии 'people').

Тот факт, что tax_query является двумерным массивом, означает, что вы можете использовать несколько таксономических запросов. В этом случае вы можете выбрать, чтобы возвращались записи, соответствующие всем таксономическим запросам (relation => 'AND'), или записи, соответствующие хотя бы одному таксономическому запросу (relation => 'OR').

Как указано в кодексе:

Эта конструкция позволяет запрашивать несколько таксономий, используя параметр relation в первом (внешнем) массиве для описания логической связи между таксономическими запросами.

Например:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'AND', // Должны удовлетворяться все таксономические запросы
        array(
            'taxonomy' => 'movie_genre',
            'field' => 'slug',
            'terms' => 'action'
        ),
        array(
            'taxonomy' => 'actor',
            'field' => 'id',
            'terms' => array( 103, 115, 206 ),
            'operator' => 'NOT IN'
        )
    )
);
$query = new WP_Query( $args );

возвращает все записи, имеющие термин move_genre со слагом 'action' И не содержащие термины actor с ID 103, 115, 206.

С другой стороны (обратите внимание на изменение relation):

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'OR', // Должен удовлетворяться хотя бы один таксономический запрос
        array(
            'taxonomy' => 'movie_genre',
            'field' => 'slug',
            'terms' => 'action'
        ),
        array(
            'taxonomy' => 'actor',
            'field' => 'id',
            'terms' => array( 103, 115, 206 ),
            'operator' => 'NOT IN'
        )
    )
);
$query = new WP_Query( $args );

возвращает все записи, которые либо имеют термин move_genre со слагом 'action' ЛИБО не содержат термины actor с ID 103, 115, 206 (или удовлетворяют обоим условиям).

31 июл. 2013 г. 17:58:25
Комментарии

Если каждая запись, соответствующая одному из таксономических запросов, соответствует и всем остальным, то не будет разницы в возвращаемых записях между установкой relation в OR и AND. Это очевидно верно в случае, когда у вас только один таксономический запрос.

Stephen Harris Stephen Harris
31 июл. 2013 г. 18:02:04
0

Использование AND означает, что возвращаемые записи должны содержать оба термина.

Использование OR означает, что записи должны содержать хотя бы один из терминов.

Если возвращаются одинаковые записи, вероятно, все ваши записи содержат оба термина.

31 июл. 2013 г. 15:41:23