2015-11-17 6 views
0

Я в какой-то связи. Я добавляю рейтинг на должности в WP. Это делается с фильтром the_content. Дело в том, что некоторые темы используют выдержку вместо содержимого, например, в архивных циклах. Добавление рейтинга к нему так же просто, как просто добавление фильтра для the_excerpt. Проблема заключается в том, что при извлечении фрагмента по теме он также запускает фильтр the_content (так что рейтинг фактически добавлен), но после этого содержимое удаляется из всех тегов html, поэтому рейтинг, который есть (фигуры), отсутствует, но счетчик остается. Это приводит к не довольно подобной ситуации:the_excerpt и the_content фильтры

enter image description here

Теперь мне интересно, что это хороший способ вокруг него? Я не думаю, что есть способ увидеть список действий, которые вызовут обработчик действий для текущего сообщения (так что если обработчик действий вызывается из фильтра the_content (отметьте current_filter()), и в 'queue' для этого сообщения есть the_excerpt просто возвращайте контент без изменений) или способ узнать, была ли функция the_content запущена функцией для извлечения выдержки. Конечно, очень грязным и ужасным обходным путем было бы проверить содержимое для текста счетчика голосов, когда обработчик действий уволен the_excerpt и просто заменит его пустой строкой, но это нехорошее решение. Я что-то упустил? Есть ли более чистый способ сделать это?

ответ

1

Хорошо, чистейшее решение, которое я мог придумать этот

function remove_mah_filter($content) 
{ 
    if (has_filter('the_content', 'your_filter')) 
    { 
     remove_filter('the_content', 'your_filter'); // if this filter got priority different from 10 (default), you need to specify it 
    } 
    return $content; 
} 
add_filter('get_the_excerpt', 'remove_mah_filter', 9); //priority needs to be lower than that of wp_trim_excerpt, which has priority of 10. Otherwise, it will still be triggered for the first post in the loop. 

// add it back so that it can be called by the actual content 
function readd_mah_filter($content) 
{ 
    add_filter('the_content', 'your_filter'); // if this filter got priority different from 10 (default), you need to specify it 
    return $content; 
} 
add_filter('get_the_excerpt', 'readd_mah_filter', 11); //priority needs to be higher than that of wp_trim_excerpt, which has priority of 10. 
Смежные вопросы