Cum să interogăm articole de la autori și categorii specifice folosind WP_query?
În prezent am o interogare WP_query unde obțin articole de la un set specific de autori. La aceasta, vreau să adaug și categorii specifice.
$args = array( 'author__in' => $authors, 'posts_per_page' => 12, 'paged' => $paged );
$authors este un array care conține ID-urile utilizatorilor.
Deci, am nevoie să interoghez articole din ambele surse, și de la autori și din categorii.
Mă gândeam să folosesc ceva de genul:
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => array ( $cat_ids ),
),
array(
'taxonomy', => 'user',
'field' => 'id',
'terms' => array( $user_ids ),
)
)
Știu că user nu este o taxonomie; totuși, caut ceva similar care să funcționeze.
EDITARE
Am încercat următoarea variantă și până acum funcționează:
$args = array(
'author__in' => $authors,
'category__in' => $terms,
'posts_per_page' => 12,
'paged' => $paged
);
Există o modalitate mai bună?
EDITARE 2
Editarea mea anterioară nu funcționează așa cum am dorit. Problema este că atunci când sunt specificate doar categoriile, nu apar articole. Am nevoie de o relație OR.
EDITARE 3
Nu am reușit să găsesc o soluție. Când folosesc author__in și category__in pentru argumente, WordPress afișează doar articolele de la autori și nu din ambele surse. Am nevoie să afișez articole atât de la autori CÂT ȘI din categorii. Ce fac greșit aici?

Este acesta ceea ce cauți?
$query = new wp_query($arr);
$arr = array(
'author__in'=> array(2,4,6), // ID-urile autorilor pe care doriți să-i includeți
'posts_per_page' => '12', // Numărul de articole pe pagină
'paged' => $paged, // Pagina curentă
'tax_query' => array(
array(
'taxonomy' => 'category', // Taxonomia (în acest caz, categoria)
'field' => 'id', // Câmpul după care se filtrează (ID)
'terms' => array ( $cat_ids ), // ID-urile categoriilor
)
)
);

Da, căutam ceva de genul acesta. Nu eram sigur dacă pot păstra author__in, încă învăț și vreau să fac lucrurile corect. EDIT-ul meu funcționează și el, așa că ce mi-ai recomanda să folosesc?

Editarea ta mi se pare bună, atâta timp cât îndeplinește scopul.

Ce se întâmplă dacă nu există autori? Vor fi tot afișate postările din categoriile specificate?

Ei bine, în acest caz postările nu vor fi afișate. Presupun că WP_Query face o operație logică AND între interogări și dacă un parametru nu este prezent, va rezulta în nimic.
Ceea ce poți face este să configurezi două interogări, atunci când prima interogare eșuează (returnează null) cealaltă (fără parametrul autor) preia controlul.

Ai putea încerca ceva de genul acesta... get_posts_by_author_sql
Alternativ, dacă dorești să selectezi postări bazate pe autori/categorii, ai putea folosi wpdb. S-ar putea să poți utiliza un "JOIN" în SQL pentru a obține ID-urile postărilor de care ai nevoie.

poți încerca acest lucru în backend:
wp-admin/edit.php?author=2 //autorul este specificat
wp-admin/edit.php?cat=16,25&author=2 //include categorii
acest test nu apare așa cum descrii, așa că verifică dacă valoarea este corectă
$terms = array(16,25);
//$author = array(2);
$args = array(
'author__in' => isset($author) ? $author : 0,
'category__in' => isset($terms) ? $terms : ''
);
$demos = new WP_Query($args);
echo "<pre>";
print_r($demos);
echo "</pre>";
