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

WordPress(PHP)如何循环输出分类时每2个为一组包裹在同一容器

WordPress 按每2个分类一组包裹容器的实现方法

原有代码问题

原有代码无法正常输出全部分组,核心原因有3个:

  • 嵌套了两层重复的分类查询循环,重复调用get_categories()产生冗余数据库请求
  • 内层循环写死了中断条件$x >= $num($num=3),且每次外层循环都会把计数器$x重置为1,永远只能输出前2个分类
  • 内外层循环使用了同名的循环变量$category,存在变量覆盖的逻辑隐患

实现方案

直接用PHP内置函数array_chunk()对分类数组做分组切割,不需要手动写复杂的计数判断,逻辑简洁不容易出错:

  1. 仅调用一次get_categories()获取全部分类数据
  2. 用array_chunk(分类数组, 每组数量)把分类按每2个一组拆分为二维数组
  3. 外层遍历分组,输出每组的包裹容器
  4. 内层遍历当前分组内的分类项,输出单个分类的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:09:41