Care este diferența dintre RELATION "AND" și "OR" în TAX_QUERY?

31 iul. 2013, 15:36:24
Vizualizări: 23.2K
Voturi: 3

Pentru că dacă folosesc:

'relation' => 'AND'

sau

'relation' => 'OR'

rezultatele sunt întotdeauna aceleași. De ce?

0
Toate răspunsurile la întrebare 2
1

tax_query este un array bidimensional, fiecare sub-array poate fi considerat o interogare de taxonomie, de obicei având forma:

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

(de exemplu, postări care conțin termenul cu slug-ul 'bob' din taxonomia 'people').

Faptul că tax_query este un array bidimensional înseamnă că puteți avea mai multe interogări de taxonomie. În acest caz, puteți dori să returnați postări care se potrivesc cu toate interogările de taxonomie (relation => 'AND') sau postări care se potrivesc cu cel puțin una dintre interogările de taxonomie (relation => 'OR').

După cum menționează codex-ul:

Această construcție vă permite să interogați mai multe taxonomii folosind parametrul relation în primul array (exterior) pentru a descrie relația booleană între interogările de taxonomie.

De exemplu:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'AND', //Trebuie să satisfacă toate interogările de taxonomie
        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 );

returnează toate postările care au termenul movie_genre cu slug-ul 'action' ȘI nu au termenii actor cu ID-urile 103, 115, 206.

Pe de altă parte (observați schimbarea relation):

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'OR', //Trebuie să satisfacă cel puțin o interogare de taxonomie
        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 );

returnează toate postările care au fie termenul movie_genre cu slug-ul 'action' SAU nu au termenii actor cu ID-urile 103, 115, 206 (sau satisfac ambele condiții).

31 iul. 2013 17:58:25
Comentarii

Dacă fiecare postare care se potrivește cu una dintre interogările de taxonomie se potrivește și cu toate celelalte, nu va exista nicio diferență în postările returnate între setarea relation la OR și AND. Acest lucru este evident adevărat în cazul în care ai doar o singură interogare de taxonomie.

Stephen Harris Stephen Harris
31 iul. 2013 18:02:04
0

Cu AND articolele returnate trebuie să aibă ambele termeni.

Cu OR articolele returnate trebuie să aibă doar unul sau celălalt termen.

Dacă returnează același lucru, probabil că toate articolele pe care le interoghezi au ambele termeni.

31 iul. 2013 15:41:23