如何使用apply_filters为全局容器创建自定义过滤器添加额外类?
为全局容器自定义类过滤器的实现方法
1. 修改容器的HTML输出
先把原有的容器代码改成支持过滤的写法,核心是用apply_filters包裹类名,替换固定的content-wrap:
<div class="<?php echo apply_filters( 'content_wrap_classes', 'content-wrap' ); ?>">
这里第一个参数content_wrap_classes是自定义的过滤器名称,第二个参数是默认基础类名,确保默认情况下容器仍保留content-wrap类。
2. 注册默认过滤器(可选但规范)
可以注册一个默认过滤器函数,方便后续统一管理,逻辑和body类的过滤器一致:
/** * 全局容器默认类处理 */ function jm_default_content_wrap_classes( $classes ) { // 可在此添加全局默认的额外类,或直接返回传入的基础类 return $classes; } add_filter( 'content_wrap_classes', 'jm_default_content_wrap_classes' );
3. 按需添加自定义类
现在就能在主题的functions.php或特定页面模板里,通过挂钩这个过滤器来添加不同的类:
示例1:添加row类
/** * 给全局容器添加row类 */ function jm_add_row_class_to_content_wrap( $classes ) { // 将字符串类名转成数组,避免重复添加 if ( is_string( $classes ) ) { $classes = explode( ' ', $classes ); } $classes[] = 'row'; // 转回字符串返回 return implode( ' ', $classes ); } add_filter( 'content_wrap_classes', 'jm_add_row_class_to_content_wrap' );
示例2:根据页面条件添加full类
比如检测到当前页面使用全屏模板时,添加full类:
// 判断当前页面是否使用全屏模板 if ( is_page_template( 'template-full-width.php' ) ) { function jm_add_full_class_to_content_wrap( $classes ) { if ( is_string( $classes ) ) { $classes = explode( ' ', $classes ); } $classes[] = 'full'; return implode( ' ', $classes ); } add_filter( 'content_wrap_classes', 'jm_add_full_class_to_content_wrap' ); }
这样处理后,容器的类名会根据添加的过滤器动态变化,实现你需要的<div class="content-wrap row">或<div class="content-wrap full">效果。
内容的提问来源于stack exchange,提问作者James Mitchell
相关产品推荐
相关产品推荐

