问题描述
我正在尝试显示与 X 类和标签 Y 相关的帖子列表。我尝试过以下代码:
$args = array(
'posts_per_page' => 4,
'tag_id' => $tag_id,
'cat' => $cat_id,
);
query_posts($args);
但它不能正常工作,并返回所有的文档。
很乐意听到你可能有的见解
最佳解决方案
编辑:查看下面的正确方法查询类别和标签交叉。
global $wp_query;
$args = array(
'category__and' => 'category',
'tag__in' => 'post_tag', //must use tag id for this field
'posts_per_page' => -1); //get all posts
$posts = get_posts($args);
foreach ($posts as $post) :
//do stuff
endforeach;
次佳解决方案
我认为这是在其他地方已被评论的 WordPress 中的错误,尝试使用标签的名称而不是 ID,然后它应该工作:
$args = array(
'posts_per_page' => 3,
'tag' => 'review',
'cat' => 9,
);
query_posts($args);
让我们知道你如何得到,不知道在名称中有多个单词的标签会发生什么。
第三种解决方案
我偶然遇到同样的问题,并通过提出 MySQL 请求来解决这个问题。
简而言之:get_post($ args) 将返回你的类别= MyCategory OR 或 tag = MyTag 的帖子。
你想要的是将 OR 更改为 AND 。
我的逻辑是直接用 MySQL 查询:
-
查询 1 =选择所有具有类别 MyCat 的帖子
-
查询 2 =选择所有标签为 MyTag 的帖子
-
最终:选择查询 1 和查询 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);
这是一个肮脏的方法,但我希望它有助于=)
第四种方案
此代码工作原理:
$args = array(
'tag' => get_queried_object()->slug, // If permalink like example.com/tag/example-tag, etc.
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'category', // Taxonomy, in my case I need default post categories
'field' => 'slug',
'terms' => 'interior', // Your category slug (I have a category 'interior')
),
)
); // Get all posts
$posts_new = get_posts( $args );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。