В чем разница между RELATION "AND" и "OR" в TAX_QUERY?
Потому что если я использую:
'relation' => 'AND'
или
'relation' => 'OR'
результаты всегда одинаковые. Почему?

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
(или удовлетворяют обоим условиям).

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