Я столкнулся с этой же проблемой и решил ее, сделав запрос MySQL.
вкратце: get_post ($ args) вернет вам сообщения, которые имеют категорию = MyCategory ИЛИ тег = MyTag.
что вы хотите изменить OR на AND .
моя логика заключалась в том, чтобы идти прямо с MySQL Query:
- Запрос 1 = Выбрать все сообщения, у которых есть категория MyCat
- Запрос 2 = Выбрать все сообщения, у которых есть тег MyTag
- И наконец: выберите все сообщения, которые находятся в Query 1 И Query 2.
Я использовал wpdb вместо query_post ();
Немного кода (возвращение опубликованных постов с категорией MyCat и тегом 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);
Это грязный способ сделать это, но я надеюсь, что это поможет =)