Me topé con este mismo problema y lo resolví haciendo una solicitud de MySQL.
en resumen: get_post ($ args) le devolverá las publicaciones que tengan la categoría = MyCategory O la etiqueta = MyTag.
lo que quieres es cambiar tu OR a AND .
mi lógica era ir directamente con una consulta MySQL:
- Consulta 1 = Seleccione todas las publicaciones que tengan la categoría MyCat
- Consulta 2 = Seleccione todas las publicaciones que tengan la etiqueta MyTag
- Finalmente: seleccione todas las publicaciones que están en la Consulta 1 Y la Consulta 2.
Solía wpdb en lugar de query_post ();
Un poco de código (devolviendo publicaciones publicadas con la categoría MyCat y etiqueta MyTag) :
$query_byTag="
SELECT wp_posts.ID
FROM wp_posts, wp_term_relationships, wp_terms
WHERE wp_posts.ID = wp_term_relationships.object_id
AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
AND wp_terms.name = 'MyTag'";
$query_byCat="
SELECT wp_posts.ID
FROM wp_posts, wp_term_relationships, wp_terms
WHERE wp_posts.ID = wp_term_relationships.object_id
AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
AND wp_terms.name = 'MyCat'";
$query ="
SELECT wp_posts.post_title AS title ,
wp_posts.post_content AS content,
wp_posts.post_date AS blogdate
FROM wp_posts
WHERE wp_posts.post_status = 'publish'
AND wp_posts.ID IN (".$query_byTag.")
AND wp_posts.ID IN (".$query_byCat.")
ORDER BY wp_posts.post_date DESC ";
$result= $wpdb->get_results($query);
Esta es una manera sucia de hacerlo, pero espero que ayude =)