WordPress:如何让SANTA FE分类模板仅显示DAY TOURS类文章?
解决方案:筛选同时属于两个分类的文章
要让category-santa-fe.php仅展示同时标记了SANTA FE和DAY TOURS分类的文章,需要利用WordPress的分类交集查询(AND关系),以下提供两种实现方式:
方法一:通过主题functions.php添加查询钩子(推荐)
这种方式无需修改模板循环逻辑,更符合WordPress开发规范。将以下代码添加到主题的functions.php文件末尾:
add_action('pre_get_posts', 'filter_santa_fe_day_tours'); function filter_santa_fe_day_tours($query) { // 仅在前台SANTA FE分类页面的主查询中生效 if (!is_admin() && $query->is_main_query() && is_category('santa-fe')) { // 获取DAY TOURS分类对象(替换slug为你的实际分类slug) $day_tours_cat = get_category_by_slug('day-tours'); if ($day_tours_cat) { $query->set('tax_query', array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => 'santa-fe', ), array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => 'day-tours', ), )); } } }
注意:如果你的DAY TOURS分类slug不是
day-tours,请替换为后台分类编辑页显示的实际slug。
方法二:直接修改category-santa-fe.php模板
若不想修改functions.php,可以直接替换模板内的查询逻辑:
- 替换模板开头的循环初始化代码:
把原代码开头的<?php if(have_posts()): while(have_posts()): the_post(); ?>替换为:
<?php // 自定义查询参数:同时匹配两个分类 $args = array( 'post_type' => 'post', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => 'santa-fe', ), array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => 'day-tours', ), ) ); $custom_query = new WP_Query($args); if($custom_query->have_posts()): while($custom_query->have_posts()): $custom_query->the_post(); ?>
- 修改模板结尾的循环收尾代码:
将原代码末尾的<?php endif; ?>替换为:
<?php endif; wp_reset_postdata(); ?>
wp_reset_postdata()用于恢复主查询的上下文,避免影响后续模板内容。
核心说明
tax_query中的relation => 'AND'是关键,它指定两个分类条件必须同时满足(即文章属于两个分类的交集)。- 也可以用分类ID替代slug,只需将
'field' => 'slug'改为'field' => 'term_id','terms'对应填写分类ID即可。
内容的提问来源于stack exchange,提问作者Kristin Mora
相关产品推荐
相关产品推荐

