WordPress电影推荐列表改造:按Genre分类筛选并自动刷新
WordPress电影分类筛选解决方案
没问题,我帮你调整代码实现按Genre分类筛选电影的功能,点击分类后自动刷新结果,分几步来完成:
1. 改造分类导航,传递筛选参数
首先修改你的Genre分类列表代码,添加「全部电影」选项,并让每个分类链接带上筛选参数,这样点击时页面会带着选中的分类参数刷新:
<?php $taxonomy = 'genre'; // 改用WordPress推荐的数组格式传递参数(3.1+版本兼容) $tax_terms = get_terms($taxonomy, ['number' => 15]); ?> <ul class="genre-filter"> <!-- 新增「全部电影」选项,点击后显示所有分类的电影 --> <li> <a href="<?php echo esc_url(add_query_arg('genre', 'all', get_permalink())); ?>" title="查看所有分类的电影"> 全部电影 </a> </li> <?php foreach ($tax_terms as $tax_term): ?> <li> <a href="<?php echo esc_url(add_query_arg('genre', $tax_term->slug, get_permalink())); ?>" title="<?php printf( __( "查看 %s 类电影" ), $tax_term->name ); ?>"> <?php echo $tax_term->name; ?> </a> </li> <?php endforeach; ?> </ul>
2. 修改电影查询逻辑,根据参数筛选内容
接下来调整你的WP_Query代码,根据URL里的genre参数来筛选对应的电影,默认显示所有分类的内容:
<?php // 获取URL中的筛选参数并做安全处理,防止恶意输入 $selected_genre = isset($_GET['genre']) ? sanitize_text_field($_GET['genre']) : 'all'; // 构建查询基础参数 $query_args = [ 'post_type' => 'movie', 'posts_per_page' => 5, 'orderby' => 'title', // 可根据需求修改排序规则,比如date、rand 'order' => 'ASC' ]; // 如果选中的不是「全部」,添加分类筛选条件 if ($selected_genre !== 'all') { $query_args['tax_query'] = [ [ 'taxonomy' => 'genre', 'field' => 'slug', // 也可改用term_id匹配分类ID 'terms' => $selected_genre ] ]; } // 执行电影查询 $recomendation = new WP_Query($query_args); if($recomendation->have_posts()) : while($recomendation->have_posts()) : $recomendation->the_post(); ?> <!-- 替换成你原有的电影内容输出代码,比如标题、海报、简介等 --> <div class="movie-item"> <h3><?php the_title(); ?></h3> <?php if (has_post_thumbnail()) : ?> <?php the_post_thumbnail('medium'); ?> <?php endif; ?> </div> <?php endwhile; wp_reset_postdata(); // 重置查询,避免影响后续页面内容 else : ?> <p>暂时没有找到该分类下的电影哦~</p> <?php endif; ?>
3. 可选优化:高亮当前选中的分类
为了让用户更清楚当前选中的分类,可以给选中的链接加个高亮样式,修改分类导航代码:
<ul class="genre-filter"> <li> <a href="<?php echo esc_url(add_query_arg('genre', 'all', get_permalink())); ?>" title="查看所有分类的电影" class="<?php echo $selected_genre === 'all' ? 'active' : ''; ?>"> 全部电影 </a> </li> <?php foreach ($tax_terms as $tax_term): ?> <li> <a href="<?php echo esc_url(add_query_arg('genre', $tax_term->slug, get_permalink())); ?>" title="<?php printf( __( "查看 %s 类电影" ), $tax_term->name ); ?>" class="<?php echo $selected_genre === $tax_term->slug ? 'active' : ''; ?>"> <?php echo $tax_term->name; ?> </a> </li> <?php endforeach; ?> </ul>
然后添加CSS样式(放到主题的style.css文件中):
.genre-filter a.active { color: #e74c3c; font-weight: 700; border-bottom: 2px solid #e74c3c; }
额外说明
- 上面的方案是页面刷新式筛选,简单易上手;如果想要无刷新更新结果,需要结合WordPress AJAX实现,有需要可以再细化。
- 确保你的
movie自定义文章类型已经正确注册并关联了genre分类法,否则筛选会无效。 - 代码中的
sanitize_text_field是安全处理步骤,一定要保留,防止恶意参数攻击。
内容的提问来源于stack exchange,提问作者Cleosetric Vlyers
相关产品推荐
相关产品推荐

