我可能有点糊涂,但我似乎不知道这里的问题是什么。
我正在开发的站点使用一个自定义循环,其中包含一个查询,该查询排除任何标记为已存档的帖子。
我想要编辑标记的原因。php模板是将自定义元输出到前端,并调整归档页面上所有帖子的外观。
它适用于大多数网站,但不受限制。php它会导致标记云中断,使单击的任何标记都会显示完整的帖子列表。
当我删除查询时,标签云可以正常工作,但存档的帖子仍然会显示出来,并且没有按照需要的方式进行布局。
我使用的查询代码是:
// The Queries
$args = array(
\'post_type\' => array(\'post\', \'report\', \'analysis\', \'guest-blog\'),
\'order\' => \'DESC\',
\'meta_query\' => array(
array(
\'key\' => \'epi_pubarchive\',
\'value\' => 1,
\'compare\' => \'!=\',
)
)
);
$the_query = new WP_Query( $args );
元键epi\\u pubarchive是一个使用元框创建的复选框,本质上是检查框是否勾选。
我已经尝试删除meta\\u查询,并尝试使用基本的post\\u类型和order参数,但这也行不通。
有人知道标签模板和查询的问题是什么吗?
有没有更好的方法来达到预期的效果?
最合适的回答,由SO网友:Tom J Nowell 整理而成
这是因为主查询将被丢弃并替换为自定义查询。您还没有告诉自定义查询查找该标记,为什么要这样做?您可能还注意到分页被破坏的原因也是一样的,您没有告诉新查询您在哪个页面上,那么为什么它会拉到正确的页面呢?
更重要的是,主查询很昂贵!你为什么要把它扔掉!为什么不修改它呢?
想象一下,你每天早上让朋友给你买一杯拿铁,每天旅行20分钟后,你把咖啡扔进垃圾桶,说“我不耐乳糖,给我一块热巧克力吧”。然后,他们又去了20分钟的旅行去拿热巧克力,让你的朋友很生气,而你却等了40分钟而不是20分钟。如果你在他们离开之前拍了拍他们的肩膀,说“嘿,我改变主意了,我想要一块热巧克力”,不是更容易吗?
使用pre_get_posts
筛选以在主查询发生之前更改其选项,例如,以下是如何更改每页的帖子数:
add_filter( \'pre_get_posts\', function( \\WP_Query $query ) {
if ( $query->is_tag() && $query->is_main_query() ) {
$query->set( \'posts_per_page\', 5 );
}
} );
您可以使用
$query->set
也可以更改其他选项,您应该这样做以设置帖子类型和分类排除。
关于数据存储和性能的最后一点提示
除了XYZ之外,你永远不应该寻找任何东西,你要说的是你在寻找什么,而不是你不在寻找什么。它速度较慢,无法缩放。有时候,在PHP中手动删除所有内容实际上更快!
因此,与其将帖子添加到存档的术语中,不如考虑使用未读/未存档的术语,并寻找那些术语?