¿Cómo consultar posts de autores y categorías específicas usando WP_Query?
Actualmente tengo una WP_Query donde estoy obteniendo posts de un conjunto específico de autores. A esto, quiero añadir categorías específicas también.
$args = array( 'author__in' => $authors, 'posts_per_page' => 12, 'paged' => $paged );
$authors es un array que contiene los IDs de los usuarios.
Entonces, necesito consultar posts tanto de autores como de categorías.
Estaba pensando en usar algo como esto:
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => array ( $cat_ids ),
),
array(
'taxonomy', => 'user',
'field' => 'id',
'terms' => array( $user_ids ),
)
)
Sé que user no es una taxonomía; sin embargo, estoy buscando algo similar que funcione.
EDICIÓN
Bueno, probé esto y está funcionando hasta ahora:
$args = array(
'author__in' => $authors,
'category__in' => $terms,
'posts_per_page' => 12,
'paged' => $paged
);
¿Hay una mejor manera?
EDICIÓN 2
Mi edición anterior no está funcionando como yo quería. El problema es que cuando solo se especifican categorías, no se muestran posts. Necesito una relación OR.
EDICIÓN 3
No he podido encontrar una solución. Cuando uso author__in y category__in para los argumentos, WordPress solo muestra posts de autores y no de ambos. Necesito mostrar posts de autores Y categorías. ¿Qué estoy haciendo mal aquí?
¿Es esto lo que estás buscando?
$query = new wp_query($arr);
$arr = array(
'author__in'=> array(2,4,6), //IDs de autores que deseas incluir
'posts_per_page' => '12',
'paged' => $paged,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'id',
'terms' => array ( $cat_ids ),
)
)
);
Sí, estaba buscando algo así. No estaba seguro de si podía mantener author__in, todavía estoy aprendiendo y quiero hacer las cosas correctamente. Mi EDIT también está funcionando, ¿qué me recomendarías usar?
Gixty
Tu edición me parece bien, siempre y cuando cumpla con el propósito.
Sudeep K Rana
¿Qué pasa si no hay autores? ¿Aún se mostrarán las publicaciones de las categorías especificadas?
Gixty
Bueno, en ese caso las publicaciones no aparecerán. Supongo que WP_Query hace un AND lógico con las consultas y si algún parámetro no está allí, terminará sin resultados.
Lo que puedes hacer es configurar 2 consultas, cuando una consulta falla (devuelve nulo) la otra (sin el parámetro de autor) toma el control.
Sudeep K Rana
Podrías intentar algo como esto... get_posts_by_author_sql
Alternativamente, si deseas seleccionar publicaciones basadas en autores/categorías podrías usar wpdb. Podrías utilizar un "JOIN" en el SQL para obtener los IDs de publicaciones que necesitas.
quizás puedas probar esto en el backend:
wp-admin/edit.php?author=2 //el autor está especificado
wp-admin/edit.php?cat=16,25&author=2 //incluir categorías
esta prueba no aparece como describes, así que verifica si el valor es correcto
$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>";