WordPress(PHP)如何循环输出分类时每2个为一组包裹在同一容器
WordPress 按每2个分类一组包裹容器的实现方法
原有代码问题
原有代码无法正常输出全部分组,核心原因有3个:
- 嵌套了两层重复的分类查询循环,重复调用
get_categories()产生冗余数据库请求 - 内层循环写死了中断条件
$x >= $num($num=3),且每次外层循环都会把计数器$x重置为1,永远只能输出前2个分类 - 内外层循环使用了同名的循环变量
$category,存在变量覆盖的逻辑隐患
实现方案
直接用PHP内置函数array_chunk()对分类数组做分组切割,不需要手动写复杂的计数判断,逻辑简洁不容易出错:
- 仅调用一次
get_categories()获取全部分类数据 - 用
array_chunk(分类数组, 每组数量)把分类按每2个一组拆分为二维数组 - 外层遍历分组,输出每组的包裹容器
- 内层遍历当前分组内的分类项,输出单个分类的HTML结构
可直接使用的代码
<?php // 仅查询一次全部分类 $categories = get_categories([ // 可按需添加查询参数,比如排除指定分类、设置排序规则等 'hide_empty' => 0, // 需要显示无文章的分类时保留这行 ]); // 按每2个分类为一组做拆分 $category_groups = array_chunk($categories, 2); // 遍历每个分组输出外层容器 foreach ($category_groups as $group): ?> <div class="sheif"> <div class="sheif__inner"></div> <div class="sheif__body"> <?php // 遍历当前分组里的分类,输出单个分类项 foreach ($group as $category): ?> <div class="sheif__book"> <a href="<?php echo esc_url(get_category_link($category->term_id)); ?>" class="book-btn"> <img src="<?php echo z_taxonomy_image_url($category->term_id); ?>" alt="本"> </a> <a href="<?php echo esc_url(get_category_link($category->term_id)); ?>" class="bar-genre"> <p><?php echo esc_html($category->name); ?></p> </a> </div> <?php endforeach; ?> </div> <div class="sheif__side-bar"> <p>ジャンルメニュー</p> </div> </div> <?php endforeach; ?>
补充说明
- 如果需要调整每组的分类数量,只需要修改
array_chunk()的第二个参数即可,比如改成3就是每3个分类一组 - 如果分类总数是奇数,最后一组会自动按剩余分类数量输出,不会漏项也不会报错
- 代码里对分类名称加了
esc_html()转义,符合WordPress开发安全规范,避免特殊字符引发页面显示问题
内容的提问来源于stack exchange,提问作者TomoEno
相关产品推荐
相关产品推荐

