我想编写一个select查询,只返回与分类术语相关联的帖子的数据food-and-beverage
SELECT wp_postmeta . * , wp_posts.post_name
FROM wp_posts, wp_postmeta, wp_terms, wp_term_relationships
WHERE wp_posts.post_type = \'projects\'
AND wp_posts.post_status = \'publish\'
AND wp_posts.ID = wp_postmeta.post_id
AND wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id = wp_terms.term_id
AND wp_terms.slug = \'food-and-beverage\'
ORDER BY wp_posts.ID DESC
由于我不知道的原因,这是返回没有
food-and-beverage
已选定
正如下面的答案所证明的那样,这不是一种理想的方法,但这是我一直致力于的方法,因为重构代码(这是生成的SQL,还有很多)将永远花费我的时间。
EDIT
<因为每个人(包括我自己)似乎都同意我这样做是错误的,所以我将不情愿地尝试重构。
然而,我将暂时保留这个问题,以防有人能为我制定一个快速解决方案(我很乐意给你一些bounty points).
对于大胆/疯狂的人,这里有一个要点,其中包含大量的来源:https://gist.github.com/2950395
我将几个“过滤器”作为POST变量传递给ajax it。
最合适的回答,由SO网友:mrwweb 整理而成
(我意识到您正在偏离这一点,但如果您能让它工作起来,这可能是值得的。随着3.4 for WP\\U Query最近的性能改进,这可能是值得的。)
WP_Query
如果这是二次循环,则是正确的决策。否则,你可能会pre_get_posts
.
当您使用WP_Query
确保:
您不需要使用保留的全局变量来保存新查询。(例如,许多人通过将新查询保存为$wp_query
然后覆盖现有的查询对象使用右循环格式,例如。$my_custom_query->have_posts();
最后,而不是使用tag
或者tax
var(已弃用),请使用tax\\u查询看看您的示例,这里有一个建议的循环:
$food_query_args = array(
\'post_type\' => \'projects\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_tag\', // or the name of your custom taxonomy
\'field\' => \'slug\',
\'terms\' => \'food-and-beverage\' // FYI, it\'s more stable imho to use the ID if you can. If you do, that switch \'slug\' in the preceding line to \'id\'
)
)
);
$food_query = new WP_Query( $food_query_args );
if( $food_query->have_posts() ) : while( $food_query->have_posts() ) : $food_query->the_post();
// STUFF
endwhile; endif; wp_reset_postdata();