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

如何实现AJAX筛选全部新闻功能?

实现新闻筛选的「全部新闻」功能方案

你当前的代码已经包含了「All News」的筛选按钮,只需要调整后端查询逻辑,同时确保前端请求正确传递空筛选条件即可,具体修改步骤如下:

1. 确认前端按钮参数(无需修改,仅验证)

你的HTML代码里「All News」按钮的data-slug已经设为空字符串,这部分是正确的:

<a class="filter-list_item active" href="javascript:void(0);" data-slug="">All News</a>

2. 后端查询逻辑修改(核心)

在functions.php的filter()函数中,需要根据传递的category参数是否为空,来决定是否添加分类筛选条件:

function filter() {
    // 获取参数并处理空值情况
    $taxSlug = isset($_POST['category']) ? $_POST['category'] : '';

    // 基础查询参数
    $queryArgs = [
        'post_type' => 'news',
        'posts_per_page' => -1
    ];

    // 仅当分类slug不为空时,添加分类筛选条件
    if (!empty($taxSlug)) {
        $queryArgs['tax_query'] = [
            'relation' => 'OR',
            [
                'taxonomy' => 'genres',
                'field' => 'slug',
                'terms' => $taxSlug
            ],
            [
                'taxonomy' => 'years',
                'field' => 'slug',
                'terms' => $taxSlug
            ]
        ];
    }

    $ajaxposts = new WP_Query($queryArgs);

    // 后续的新闻循环输出逻辑保持不变...
}
// 补充AJAX钩子(确保未登录用户也能触发)
add_action('wp_ajax_filter_news', 'filter');
add_action('wp_ajax_nopriv_filter_news', 'filter');

3. 前端AJAX逻辑优化(可选)

原AJAX代码已经能正确传递空值,不过可以添加参数提取的小优化,让逻辑更清晰:

$('.filter-list_item').on('click', function() {
    $('.filter-list_item').removeClass('active');
    $(this).addClass('active');

    const categorySlug = $(this).data('slug');

    $.ajax({
        type: 'POST',
        url: '/wp-admin/admin-ajax.php',
        dataType: 'html',
        data: {
            action: 'filter_news',
            category: categorySlug // 空值会正常传递给后端
        },
        success: function(res) {
            $('.news-list').html(res);
        }
    })
});

修改完成后,点击「All News」按钮时,后端会跳过分类筛选逻辑,直接返回所有新闻内容,实现展示全部新闻的功能。

内容的提问来源于stack exchange,提问作者user19793288

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:36:18