2013-11-28 2 views
0

У меня эту функциюПереопределение apply_filter с помощью add_filter дублирует вывод?

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, но выход выходит два раза, один для исходного кода и второй раз с моим кодом (обратите внимание, я добавил класс «тестирование класса-в-фильтр» на ссылку, чтобы увидеть, если он выводит его)

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'); 

есть ли что-то очевидно, что я этого не делаю? Проработал несколько часов, чтобы заставить это работать! Заранее спасибо

ответ

0

В вашей функции testing_filter_abc ($ содержания)

$ содержание представляет собой массив с 2-х элементов; строка и ссылка.

Там нет переменных $ содержания, как этого переменные в функции bp_insert_activity_meta

Вашего возвращения в testing_filter_abc() включает в себя массив, который был принят к фильтру.

Используйте другое имя для массива, переданного вашему фильтру, и это будет более очевидно.

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