You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:53