如果 "filter name" 是 apply_filters 中的 "$filter" 形式,如何创建一个 "add_filter" 函数?

How to create an "add_filter" function if "filter name" is in the form of "$filter" in apply_filters?

在下面的 WP php 代码中:

function bbp_get_topic_post_count( $topic_id = 0, $integer = false ) {
        $topic_id = bbp_get_topic_id( $topic_id );
        $replies  = (int) get_post_meta( $topic_id, '_bbp_reply_count', true ) + 1;
        $filter   = ( true === $integer ) ? 'bbp_get_topic_post_count_int' : 'bbp_get_topic_post_count';

        return apply_filters( $filter, $replies, $topic_id );
    }

我想使用过滤器更改“$replies”。既然上面有"apply_filters",我觉得可以加上"add_filter"。但似乎过滤器名称是“$filter”

function bbp_reply_count_modified( $replies, $topic_id ) {
            $topic_id = bbp_get_topic_id( $topic_id );
            $replies  = (int) get_post_meta( $topic_id, '_bbp_reply_count', true ); // deleted '+ 1'
            return $replies;
add_filter( '___________________', 'bbp_reply_count_modified', 10, 2 );

在这种情况下,如何创建一个 "add_filter" 函数?

感谢您的帮助。

过滤器名称,基于方法的第二个参数 $integer,是 bbp_get_topic_post_count_int(当 $integertrue) 或 bbp_get_topic_post_count(当 $integerfalse,这是 $integer 的默认参数值,如果在方法调用时没有它的值)。

这里赋值为$filter

$filter = ( true === $integer ) ? 'bbp_get_topic_post_count_int' : 'bbp_get_topic_post_count';

因此,您无需修改​​该方法,但应搜索该方法的用法以查看 $integer 的输入参数是哪个。

要为 $integer = true 使用过滤器,请使用:

add_filter( 'bbp_get_topic_post_count_int', 'bbp_get_topic_post_count', 10, 2 );

要为 $integer = false 使用过滤器,请使用:

add_filter( 'bbp_get_topic_post_count', 'bbp_get_topic_post_count', 10, 2 );