bounty将在2天后过期。回答此问题可获得+50声望奖励。Moni希望吸引更多人关注此问题。
问题:WP_Query
搜索字符串需要查找分类名称。
默认情况下,$args['s']
只在标题、内容和摘录中搜索,但我还需要在自定义分类名称中搜索。
因此,现在我尝试使用自定义查询来实现它;下面是我代码:
$keyword = "Monster";
$args['s'] = $keyword;
add_filter('posts_join', 'filter_post_join', 10, 1);
add_filter('posts_where', 'filter_post_where', 10, 1);
$posts = new WP_Query($args);
function filter_post_join( $join ) {
global $wpdb;
$join .= " LEFT JOIN $wpdb->term_relationships as txr ON ( {$wpdb->posts}.ID = txr.object_id )";
$join .= " LEFT JOIN $wpdb->terms as trms on ( txr.term_taxonomy_id = trms.term_id )";
return $join;
}
function filter_post_where( $where ) {
global $keyword;
$where .= " AND trms.name LIKE $keyword";
return $where;
}
有谁能告诉我我做错了什么吗?
我找到了一个可行的解决方案https://gist.github.com/markoman78/e22bbebe0d2305f294eb554d5a39d8c3
但它有一个问题,它不能过滤post_type
;如果我想从“x”帖子类型中获取帖子,它也会从具有匹配标记名称的其他帖子类型中获取帖子
1条答案
按热度按时间eh57zj3b1#
要使用WP_Query搜索特定分类中的帖子,您可以在查询中使用tax_query参数。此参数允许您指定要搜索的分类,以及要包括在结果中的该分类中的术语。
下面是一个示例,说明如何在WP_Query搜索字符串中使用tax_query参数按分类名称筛选帖子:
此示例使用my_custom_post_type帖子类型与my_taxonomy分类,并搜索分配给该分类中my_taxonomy_term术语得帖子.
在MySQL中,等效的查询可能如下所示:
此查询对wp_posts、wp_term_relationships、wp_term_taxonomy和wp_terms表执行JOIN,以搜索分配给指定分类术语的帖子。它按帖子类型和分类名称筛选结果,并返回wp_posts表中匹配帖子的所有列。
当然,您可以根据需要调整此查询以满足您的特定要求。例如,您可能希望包含附加WHERE子句以进一步过滤结果,或者仅从wp_posts表中选择特定列。