如何在循环完成后重置/删除添加的过滤器‘POSTS_JOIN’和‘POSTS_ORDERBY’?

时间:2013-09-11 作者:Debiprasad

我正在使用以下过滤器对类别存档页面上显示的结果进行排序:posts_joinposts_orderby. 有一个小部件,显示最近的帖子。我正在使用WordPress的默认最近帖子小部件。但它没有显示任何结果。当我调查时,我发现应用的过滤器正在应用于此查询。因此,我尝试使用以下代码删除过滤器:

remove_filter(\'posts_join\', \'my_filter_join\');
remove_filter(\'posts_orderby\', \'my_filter_orderby\');
但它仍然不起作用。

我还尝试将以下代码放入过滤器函数本身:

// Disable this filter for future queries!
remove_filter(current_filter(), __FUNCTION__);
它也不起作用。

如何解决此问题?

1 个回复
SO网友:Aurovrata

有几种方法可以实现这一目标,

使用get_posts 查询属性所在的函数suppress_filters 设置为false(默认值)。这将确保不会为此查询触发筛选器conditional tags 测试您所在的页面(category archive page) 与sidebar/widget query.

结束

相关推荐

Apply_Filters()和_Excerpt提供了意外的结果

我觉得我一定错过了一些显而易见的东西,但我似乎无法让WordPress合作。我正在用一个函数生成Facebook OG标签。除了摘录,一切都很好。自get_the_excerpt($post->ID), 有没有其他方法可以创建摘录而不必创建一个全新的循环?我觉得这太过分了。我的第一反应是apply_filters():$description = apply_filters(\'the_excerpt\', get_post($post->ID)->post_content);