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

如何点击按钮时动态传递分类名至WordPress的WP_Query

解决动态加载对应分类文章的问题

没问题,咱们只需要调整两处代码——把前端点击按钮获取到的分类名称传递给后端,再让PHP动态接收这个参数并用于WP_Query查询就行,具体修改如下:

1. 修改JavaScript代码,传递分类参数

原来的代码已经获取到了按钮上的分类名称,但没有把它传给后端接口。我们需要给fetch函数增加参数,并在AJAX请求中携带这个分类值:

function fetch(category){
    $.post('/PRACA/FundacjaWP/wp-admin/admin-ajax.php', {
        'action':'my_action',
        'category': category // 新增:把分类名称传给后端
    }, function(response){
        $("#pick-event").html(response);
    });
}

$(".show-specific-events").on("click", function(e){
    e.preventDefault();
    var category = $(this).text().trim(); // 加trim()避免按钮文字前后的空格干扰
    fetch(category);
});

这里给fetch函数添加了category参数,并且在$.post的请求数据里新增了category字段,同时用trim()处理了按钮文本,防止空格导致分类匹配失败。

2. 修改PHP函数,动态接收并使用分类参数

原来的PHP代码里category_name是固定值,现在我们需要接收前端传过来的分类参数,还要做安全验证避免无效请求:

add_action('wp_ajax_my_action', 'data_fetch');
add_action('wp_ajax_nopriv_my_action', 'data_fetch');
function data_fetch(){
    // 1. 安全获取并过滤前端传递的分类参数
    $category = isset($_POST['category']) ? sanitize_text_field($_POST['category']) : '';
    
    // 2. 验证分类是否有效(确保这个分类确实存在)
    if(empty($category) || !get_category_by_slug($category)){
        echo '<p>无效的分类</p>';
        die();
    }

    // 3. 动态使用分类参数构建WP_Query
    $the_query = new WP_Query(array(
        'post_type'=>'wydarzenie',
        'posts_per_page'=>2, 
        'category_name'=>$category // 替换为动态获取的分类slug
    ));
    
    if($the_query->have_posts()):
        while($the_query->have_posts()): $the_query->the_post(); ?>
              <h2><?php the_title(); ?></h2>
              <p><?php the_content(); ?></p>
        <?php endwhile;
        wp_reset_postdata();
    else:
        // 当分类下没有文章时给出提示
        echo '<p>该分类下暂无文章</p>';
    endif;
    die();
}

额外说明:

  • 这里用get_category_by_slug验证分类,是因为WP_Query的category_name参数对应的是分类的slug(不是显示名称)。如果你的按钮上显示的是分类的正式名称(不是slug),可以把验证逻辑改成这样:
    $category_name = isset($_POST['category']) ? sanitize_text_field($_POST['category']) : '';
    $category = get_category_by_name($category_name);
    if(!$category){
        echo '<p>无效的分类</p>';
        die();
    }
    $category_slug = $category->slug;
    // 然后WP_Query里用 'category_name'=>$category_slug
    
  • 用sanitize_text_field过滤参数是为了避免恶意输入,保证请求安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:59