the_excerpt和the_content过滤器

时间:2015-11-17 15:10:32

标签: wordpress

我是一个绑定者。我正在为WP中的帖子添加评分。这是通过the_content过滤器完成的。事实上,有些主题使用摘录而不是内容,比如存档循环。添加评级就像添加the_excerpt的过滤器一样简单。问题是,当主题检索到摘录时,它也会触发the_content过滤器(因此实际上会添加评级),但之后,内容将被删除所有html标签,因此评级(形状)已消失但是投票柜台仍在。这导致了非常漂亮的情况:

enter image description here

现在我想知道它的好方法是什么?我认为没有办法查看将为当前帖子调用操作处理程序的操作列表(因此,如果从the_content过滤器调用操作处理程序(由current_filter()检查)并且存在此帖子的“队列”中的the_excerpt只返回没有更改的内容)或者知道是否the_content被函数触发以检索摘录的方法。当然,非常肮脏和可怕的解决方法是在the_excerpt触发操作处理程序时检查投票计数器文本的内容,并将其替换为空字符串,但这不是一个好的解决方案。我在这里错过了什么吗?有没有更简洁的方法呢?

1 个答案:

答案 0 :(得分: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.