如何修改代码仅对特定分类实现随机文章分页无重复
解决方案
你只需要在原有排序修改逻辑前增加查询条件校验,仅在命中你指定的分类时才应用随机排序规则即可,修改后的完整代码如下:
session_start(); // 新增第二个参数$wp_query用来获取当前查询信息 add_filter('posts_orderby', 'edit_posts_orderby', 10, 2); function edit_posts_orderby($orderby_statement, $wp_query) { // 这里替换为你要生效的分类ID,多个分类用数组格式比如 [3,5,7] $target_category_ids = [2]; // 也可以用分类别名判断,对应下方判断改为is_category(['news','cases'])即可 // 校验规则:仅主查询 + 指定分类存档页 才触发随机排序 if (!$wp_query->is_main_query() || !is_category($target_category_ids)) { // 不符合条件直接返回原有排序规则 return $orderby_statement; } $seed = $_SESSION['seed']; if (empty($seed)) { $seed = rand(); $_SESSION['seed'] = $seed; } $orderby_statement = 'RAND('.$seed.')'; return $orderby_statement; }
- 你需要把
$target_category_ids的值替换为你需要生效的分类ID,后台编辑分类时浏览器地址栏的tag_ID参数值就是分类ID - 如果需要对多个分类生效,直接在数组里增加对应ID即可
- 如果需要让这个随机规则同时对分类页内的子分类也生效,可以把
is_category判断替换为in_category($target_category_ids, $wp_query->post)
内容的提问来源于stack exchange,提问作者Williams
相关产品推荐
相关产品推荐

