Come interrogare articoli di autori e categorie specifiche usando WP_query?
Attualmente ho una WP_query dove ottengo post da un set specifico di autori. A questo, voglio aggiungere anche categorie specifiche.
$args = array( 'author__in' => $authors, 'posts_per_page' => 12, 'paged' => $paged );
$authors è un array contenente gli ID degli utenti.
Quindi, ho bisogno di interrogare i post sia dagli autori che dalle categorie.
Stavo pensando di usare qualcosa del genere:
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => array ( $cat_ids ),
),
array(
'taxonomy', => 'user',
'field' => 'id',
'terms' => array( $user_ids ),
)
)
So che l'utente non è una tassonomia; tuttavia, sto cercando qualcosa di simile che funzioni.
MODIFICA
Bene, ho provato questo e finora sta funzionando:
$args = array(
'author__in' => $authors,
'category__in' => $terms,
'posts_per_page' => 12,
'paged' => $paged
);
C'è un modo migliore?
MODIFICA 2
La mia modifica precedente non funziona come volevo. Il problema è che quando vengono specificate solo le categorie, non viene mostrato alcun post. Ho bisogno di una relazione OR.
MODIFICA 3
Non sono riuscito a trovare una soluzione. Quando uso author__in e category__in per gli argomenti, WordPress mostra solo i post degli autori e non entrambi. Ho bisogno di mostrare i post sia degli autori CHE delle categorie. Cosa sto sbagliando qui?

È questo quello che stai cercando?
$query = new wp_query($arr);
$arr = array(
'author__in'=> array(2,4,6), //ID degli autori che vuoi includere
'posts_per_page' => '12',
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => array ( $cat_ids ),
)
)
);

Sì, stavo cercando qualcosa del genere. Non ero sicuro se potevo mantenere author__in, sto ancora imparando e voglio fare le cose nel modo giusto. Anche la mia modifica EDIT funziona, quindi cosa mi consiglieresti di usare?

Cosa succede se non ci sono autori? I post delle categorie specificate verranno comunque mostrati?

Bene, in quel caso i post non verranno visualizzati. Suppongo che WP_Query faccia un AND logico con le query e se un parametro non è presente finirà per non restituire nulla.
Quello che puoi fare è impostare 2 query, quando la prima fallisce (restituisce null) l'altra (senza il parametro dell'autore) prende il posto.

Potresti provare qualcosa come questo... get_posts_by_author_sql
In alternativa, se vuoi selezionare i post in base agli autori/categorie potresti usare wpdb. Potresti utilizzare un "JOIN" nell'SQL per ottenere gli ID dei post che ti servono.

potresti provare questo nel backend:
wp-admin/edit.php?author=2 //autore specificato
wp-admin/edit.php?cat=16,25&author=2 //include categorie
questo test non appare come descrivi, quindi controlla se il valore è corretto
$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>";
