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

如何用add_filter函数为WordPress中的div添加自定义类?

你的思路没问题,但得补上关键的函数定义

首先得说清楚:WordPress本身没有原生的div_class函数和div_class过滤器,所以你现在的代码直接调用会报错——因为div_class()这个函数根本不存在。不过你的方向是对的,完全可以模仿body_class()的机制来实现自定义div类的添加,只需要补上缺失的函数定义就行。

完整的实现方案

  • 定义div_class()核心函数,模仿WordPress原生body_class()的逻辑,负责初始化类数组、应用过滤器并输出最终的类字符串:

    function div_class($class = '') {
        // 初始化类数组
        $classes = array();
        
        // 如果传入了自定义类,合并到数组中
        if (!empty($class)) {
            if (!is_array($class)) {
                $class = preg_split('#\s+#', $class);
            }
            $classes = array_merge($classes, $class);
        }
        
        // 触发我们自定义的过滤器,允许修改类数组
        $classes = apply_filters('div_class', $classes);
        
        // 去重、过滤空值,转成空格分隔的字符串
        $classes = array_filter(array_unique($classes));
        
        // 输出类(如果有类的话,前面加空格,避免和已有类连在一起)
        echo $classes ? ' ' . implode(' ', $classes) : '';
    }
    
  • 保留你写的过滤器逻辑,用来根据页面类型动态添加类:

    add_filter( 'div_class', 'add_custom_div_class' ); 
    function add_custom_div_class( $classes ) { 
        if ( is_single() ) { 
            $classes[] = 'post'; 
        } else if ( is_singular( 'custom-post-type' ) ) { 
            $classes[] = 'custom-post-type-class'; 
        } 
        return $classes; 
    }
    
  • 在主题中调用,和你原来的写法一致即可:

    <div class="wrapper <?php div_class(); ?>">
    

为什么这样可行?

我们自定义的div_class()函数和WordPress原生body_class()的逻辑完全对齐:先初始化类数组,支持传入自定义类,然后通过apply_filters触发我们注册的过滤器,最后处理并输出类字符串。你写的过滤器逻辑可以正常修改类数组,整个流程既灵活又符合WordPress的开发规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:50:18