对 div 类使用 apply_filters 通过函数添加额外的类

问题描述 投票:0回答:1

这个把我难住了。

因此,如果我们想向主体类添加自定义类,很容易创建这样的过滤器。

/**
 * 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')">

希望这是有道理的。

wordpress function filter
1个回答
0
投票

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 ) );
© www.soinside.com 2019 - 2024. All rights reserved.