如何实现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
相关产品推荐
相关产品推荐

