如何点击按钮时动态传递分类名至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
相关产品推荐
相关产品推荐

