Executing Queries in tag.php

时间:2016-05-13 作者:jongoeson

我可能有点糊涂,但我似乎不知道这里的问题是什么。

我正在开发的站点使用一个自定义循环,其中包含一个查询,该查询排除任何标记为已存档的帖子。

我想要编辑标记的原因。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参数,但这也行不通。

有人知道标签模板和查询的问题是什么吗?

有没有更好的方法来达到预期的效果?

1 个回复
最合适的回答,由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中手动删除所有内容实际上更快!

因此,与其将帖子添加到存档的术语中,不如考虑使用未读/未存档的术语,并寻找那些术语?

相关推荐

Ordering terms whilst in loop

我有一个页面模板,显示所有;“发布”;在两个自定义分类中,帖子显示在一个表中$type = $_GET[\'type\']; $category = $_GET[\'category\']; args = array( \'post-type\' => \'literature\', \'posts_per_page\' => -1, \'tax_query\' => array(