POST_RESULTS过滤器在侧边栏和主节中被分页搞混了

时间:2015-05-18 作者:jonathankoren

我有一个post\\u results过滤器,我想用它来操作从查询返回的结果。假设它应该在第一页的第一篇帖子周围加上星星,在第二页的第二篇帖子周围加上星星,依此类推。

当我看到它在主内容区域工作时,一切看起来都很好,但当它被侧边栏上的“最近发布”小部件触发时,它的行为是主内容所在的页码,而不是侧边栏显示的第一页。例如,如果主要内容在第3页上,则页面上的第三篇文章周围有星星,但“相关文章”小部件中的第三篇文章周围也有星星,即使它实际显示的是第一页的结果。

我的过滤器是用

if (is_home() && is_main_query()) 
。我不能在\\u中使用\\u loop(),因为过滤器是在调用\\u post()之前启动的,因此尚未进入循环。

回显get\\u query\\u var(\'paged\')和$wp\\u query->query\\u vars[\'paged\')显示主要内容的页码,但如果我进入wp的默认小部件。php我看到它实际上使用了一个侧查询

$r = new WP_Query( apply_filters( \'widget_posts_args\', array( \'posts_per_page\' => $number, \'no_found_rows\' => true, \'post_status\' => \'publish\', \'ignore_sticky_posts\' => true ) ) );
并且回显$r->query\\u vars[\'paged\']会显示正确的页码,即使我的post\\u过滤器已经启动了。相关帖子打印链接时回显,显示is\\u main\\u query()返回true,在\\u中,循环()与主内容块中的情况不同。

我真的很困惑我该如何区分这两种情况。

1 个回复
SO网友:jonathankoren

答案是指定add\\u filter()调用上的所有参数,然后可以将POST数组和查询发送到回调。添加\\u筛选器(\'posts\\u results\',\'do\\u stuff\',10,2);

结束

相关推荐

添加到数组并通过do_action/Apply_Filters传递它

作为练习,我正在使用PHPclass to add meta boxes 我在GitHub上找到了。我只是复制了代码,现在我正在玩它来理解它。其工作原理如下:包含该类的文件包含在init中。在该文件内部,但在类外部,有一个空数组$meta_boxes 已初始化之后,使用apply_filters. 我猜是apply_filters 使用而不是do_action 因为后者不返回任何内容——$meta_boxes = apply_filters( \'cmb_meta_boxes\', $meta_boxes