这个把我难住了。
因此,如果我们想向主体类添加自定义类,很容易创建这样的过滤器。
/**
* Body Class
*
*/
function jm_custom_body_class( $classes ) {
$classes[] = 'custom-class';
return $classes;
}
add_filter( 'body_class', 'jm_custom_body_class' );
那么我如何为站点范围的容器创建自己的自定义过滤器,例如。
<div class="content-wrap">
然后在其他地方,也许是一个页面模板,我可能想添加一个行类到该行类中,并使用一个如下所示的函数来挂钩。
<div class="content-wrap row">
或者也许
<div class="content-wrap full">
取决于我需要什么
我猜我可以使用 apply_filters 来实现这个?
<div class="apply_filters('content-wrap' 'don't know how to this')">
希望这是有道理的。
apply_filters()
函数(至少)接受两个参数:钩子的名称和要过滤的值。可以在前两个参数之后添加其他参数,以便为附加到过滤器的回调提供更多参数。
对于您的情况,我通常将类作为数组放入变量中,以使管理更容易:
add_filter( 'jm_content_wrap_classes', static function ( $classes ): array {
if ( ! is_array( $classes ) ) {
$classes = [ 'content-wrap' ];
}
if ( condition() ) {
$classes[] = 'row';
}
return $classes;
} );
...
$classes = apply_filters( 'jm_content_wrap_classes', [ 'content-wrap' ] );
printf( '<div class="%s">', esc_attr( implode( ' ', $classes ) ) );
或者过滤字符串:
add_filter( 'jm_content_wrap_classes', static function ( $classes ): string {
if ( ! is_string( $classes ) ) {
$classes = 'content-wrap';
}
if ( condition() ) {
$classes .= ' row';
}
return $classes;
} );
...
$classes = apply_filters( 'jm_content_wrap_classes', 'content-wrap' );
printf( '<div class="%s">', esc_attr( $classes ) );