使用add_filter覆盖apply_filter会重复输出吗?

时间:2013-11-28 02:26:15

标签: php wordpress buddypress

我有这个功能

function bp_insert_activity_meta( $content ) {
    global $activities_template;

    // Strip any legacy time since placeholders from BP 1.0-1.1
    $content = str_replace( '<span class="time-since">%s</span>', '', $content );

    // Insert the time since.
    $time_since = apply_filters_ref_array( 'bp_activity_time_since', array( '<span class="time-since">' . bp_core_time_since( $activities_template->activity->date_recorded ) . '</span>', &$activities_template->activity ) );

    // Insert the permalink
    if ( !bp_is_single_activity() )
        $content = apply_filters_ref_array( 'bp_activity_permalink', array( sprintf( '%1$s <a href="%2$s" class="view activity-time-since" title="%3$s">%4$s</a>', $content, bp_activity_get_permalink( $activities_template->activity->id, $activities_template->activity ), esc_attr__( 'View Discussion', 'buddypress' ), $time_since ), &$activities_template->activity ) );
    else
        $content .= str_pad( $time_since, strlen( $time_since ) + 2, ' ', STR_PAD_BOTH );

    return apply_filters( 'bp_insert_activity_meta', $content );
}

我想将add_Filter添加到此部分:

$content = apply_filters_ref_array( 'bp_activity_permalink', array( sprintf( '%1$s <a href="%2$s" class="view activity-time-since" title="%3$s">%4$s</a>', $content, bp_activity_get_permalink( $activities_template->activity->id, $activities_template->activity ), esc_attr__( 'View Discussion', 'buddypress' ), $time_since ), &$activities_template->activity ) );

这就是我尝试add_filter的方法,但输出两次,一次用于原始代码,第二次用我的代码(注意我在链接中添加了“testing-class-for-filter”类来查看如果输出它)

function testing_filter_abc( $content ) {
    global $activities_template;

    // Insert the time since.
    $time_since = apply_filters_ref_array( 'bp_activity_time_since', array( '<span class="time-since">' . bp_core_time_since( $activities_template->activity->date_recorded ) . '</span>', &$activities_template->activity ) );

    return sprintf( '%1$s <a href="%2$s" class="view testing-class-for-filter activity-time-since" title="%3$s">%4$s</a>', $content, bp_activity_get_permalink( $activities_template->activity->id, $activities_template->activity ), esc_attr__( 'View Discussion', 'buddypress' ), $time_since );
}

add_filter( 'bp_activity_permalink', 'testing_filter_abc' );

有什么明显的事我不做吗?一直在努力让这个工作! 提前致谢

1 个答案:

答案 0 :(得分:0)

在你的函数testing_filter_abc($ content)

$ content是一个包含2个元素的数组;一个字符串和一个引用。

在函数bp_insert_activity_meta

中没有像变量那样的变量$ content

您在testing_filter_abc()中的返回包括传递给过滤器的数组。

为传递给过滤器的数组使用不同的名称,这将更加明显。

function testing_filter_abc( $content_array ) {
  var_dump( $content_array )