在过去的几个小时里,我一直在尝试使用过滤器挂钩posts_where
和posts_join
要根据分类法术语搜索帖子,在本例中,分类法为“category”,术语为“politics”
这是我尝试的结果,结果是一个空查询:
这条线在钩子里posts_where
$where .= " OR ($wpdb->term_taxonomy.taxonomy IN (\'category\') AND $wpdb->terms.name = \'politics\')";
这就是我用来连接不同表的方法:$join .= " LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id ";
$join .= " LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) ";
$join .= " LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";
$join .= " LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id) ";
我确实想出了一个可行的替代方案,但我想知道我在前面的代码中犯了什么错误,以及如何使其工作。可行的替代方案是这样的(不使用posts_join
挂钩):
$search .= " OR ($wpdb->posts.ID IN(
SELECT $wpdb->term_relationships.object_id as post_id
FROM $wpdb->term_taxonomy, $wpdb->terms, $wpdb->term_relationships
WHERE $wpdb->term_taxonomy.term_id = $wpdb->terms.term_id
AND $wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->term_taxonomy.taxonomy in (\'category\')
AND ($wpdb->terms.name LIKE \'politics\')
)
)";
那么,我如何使用posts_where
和posts_join
查询分类术语的挂钩?