如何用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
相关产品推荐
相关产品推荐

