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

如何编写AJAX请求实现自定义文章类型Speakers的分类筛选

实现自定义文章类型分类筛选方案

一、调整前端AJAX代码

先给每个分类项添加分类法标识(data-taxonomy属性,值为positions或countries),再修改JS代码同时传递分类法类型和术语slug:

// === AJAX
$('.cat-list_item').on('click', function() {
  $('.cat-list_item').removeClass('active');
  $(this).addClass('active');
  $.ajax({
    type: 'POST',
    url: '/wp-admin/admin-ajax.php',
    dataType: 'html',
    data: {
      action: 'filter_speakers',
      taxonomy: $(this).data('taxonomy'), // 传递分类法类型
      term_slug: $(this).data('slug')     // 传递选中的术语slug
    },
    success: function(res) {
      $('.speakers-list').html(res);
    }
  })
});

二、补全后端PHP查询逻辑

在functions.php中完善filter_speakers函数,通过WP_Query筛选对应分类的文章并输出卡片HTML:

// AJAX
function filter_speakers() {
    // 验证参数是否存在
    if (!isset($_POST['taxonomy']) || !isset($_POST['term_slug'])) {
        wp_die();
    }

    // 清理参数避免注入
    $taxonomy = sanitize_text_field($_POST['taxonomy']);
    $term_slug = sanitize_text_field($_POST['term_slug']);

    // 构建查询参数
    $args = array(
        'post_type' => 'speakers',
        'posts_per_page' => -1, // 显示所有符合条件的文章
        'tax_query' => array(
            array(
                'taxonomy' => $taxonomy,
                'field'    => 'slug',
                'terms'    => $term_slug,
            ),
        ),
    );

    $speakers_query = new WP_Query($args);

    // 循环输出文章卡片
    if ($speakers_query->have_posts()) {
        while ($speakers_query->have_posts()) {
            $speakers_query->the_post();
            // 替换成你的实际卡片HTML结构,示例如下:
            ?>
            <div class="speaker-card">
                <h3><?php the_title(); ?></h3>
                <?php if (has_post_thumbnail()) : ?>
                    <div class="speaker-thumb"><?php the_post_thumbnail(); ?></div>
                <?php endif; ?>
                <div class="speaker-info">
                    <span><?php echo get_the_term_list(get_the_ID(), 'positions', '', ', ', ''); ?></span>
                    <span><?php echo get_the_term_list(get_the_ID(), 'countries', '', ', ', ''); ?></span>
                </div>
                <div class="speaker-bio"><?php the_excerpt(); ?></div>
            </div>
            <?php
        }
        wp_reset_postdata();
    } else {
        // 无匹配内容时的提示
        echo '<p>暂无符合条件的演讲者</p>';
    }

    wp_die(); // 必须调用,结束AJAX请求
}
add_action('wp_ajax_filter_speakers', 'filter_speakers');
add_action('wp_ajax_nopriv_filter_speakers', 'filter_speakers');

三、分类项HTML示例

确保分类项包含data-taxonomy和data-slug属性:

<!-- 职位分类列表 -->
<div class="cat-list">
    <div class="cat-list_item active" data-taxonomy="positions" data-slug="ceo">CEO</div>
    <div class="cat-list_item" data-taxonomy="positions" data-slug="cto">CTO</div>
</div>

<!-- 国家分类列表 -->
<div class="cat-list">
    <div class="cat-list_item" data-taxonomy="countries" data-slug="china">中国</div>
    <div class="cat-list_item" data-taxonomy="countries" data-slug="usa">美国</div>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:57:21