获取给定分类类型中每个术语的最新帖子

时间:2015-04-19 作者:Mike

我正在寻找一种有效的方法,从给定分类法类型的每个术语中检索最新的帖子。我发现this question, 这与我自己的解决方案是一样的:

$terms = get_terms( \'my_taxonomy\' );

foreach( $terms as $term) {
    $args = array(
        \'posts_per_page\' => 1,
        \'post_type\' => \'any\',
        \'my_taxonomy\' => $term -> slug
    );
    $termQuery = new WP_Query( $args );

    while ( $termQuery -> have_posts() ) : $termQuery -> the_post(); ?>
        // display post
    endwhile;
}
基本上,获取所有术语,然后针对每个术语执行WordPress查询以检索最近的帖子。

我看不出有什么理由不能像预期的那样工作,但我无法摆脱这样一种感觉,即它效率低下得令人痛苦。有没有更好的方法?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

你是对的,这是无效的,而且你对此也无能为力。我认为唯一的其他方法可能是使用一个非常大(也不有效)的自定义SQL查询,不幸的是,我无法帮助您。如果你有10或20个条款,影响不会那么大,但如果你有更多条款,效果会非常明显。

唯一有效的方法是将结果放入trancient,然后在发布、删除或更新新帖子时刷新并重置该瞬态(使用transition_post_status 挂钩)。如果你在短时间内没有发布很多帖子,这将非常有效。如果您每天要发布一到两次以上的内容,那么不幸的是,如果您只有几个术语,那么我不会费心走这条路线,因为设置瞬态比实际查询本身更昂贵。

参考文献

Transient API

  • transition_post_status

  • 其他资源

    这里有一些帖子,你可以看看我最近做的关于瞬变和使用瞬变的帖子transition_post_status

    • Transient not working for custom loops

    • Get all categories and posts in those categories

    • Custom query - alternate posts by category

      \'no_found_rows\' => true, 到您的查询参数。默认情况下,如果你要求一个帖子,WP_Query 检索这一篇文章,但它也会检查完整数据库中与查询参数匹配的所有文章。这样做是为了分页。为了避免在像您这样的查询中出现这种情况,no_found_rows 已使用。这将使WP_Query 寻找第一个匹配的职位,然后在找到匹配的职位后立即退出

      您首先要检查$terms 在使用它之前是否实际具有有效值。get_terms 成功时返回术语数组,或WP_Error 或失败时为空阵列。如果您的代码失败,省略这些检查将导致php错误和通知,这是您应该避免的错误。您需要记住,如果有任何代码可能失败(几乎是任何代码),您需要确保代码以预期的受控方式失败。在这种情况下,您需要检查$terms 不是空的或$terms 未返回WP_Error 对象

      您需要重置的每个实例WP_Query. 的一个实例WP_Query 可能会对的下一个实例产生意外影响WP_Query. 如果忽略重置每个查询,可能会使您在出现代码故障和bug时陷入白费力气。Always 确保重置所有自定义查询。应通过添加wp_reset_postdata() 就在之后endwhile 但之前endif 在您的循环中。

      你应该使用合适的tax_query 作为{tax} 语法按单据折旧

      最后的想法为了测试代码的有效性,请在本地安装上设置一个测试页面,如我在中所述this post. 这将让您通过返回db调用的数量以及特定代码进行这些调用所花费的时间来了解代码的效率。我always 这样测试我的代码。

      在本地安装上安装以下插件也是一个好主意:(不要在生产/实时站点上安装这些插件。一旦安装,你就会明白原因。)

      注意:我与这些插件没有任何关联:-)

      这些插件对于开发人员来说是必须的,它会将调试错误打印到屏幕上,向您显示页面加载时间、查询的总量和所用的时间,还将分解这些查询等。

    结束

    相关推荐

    SSL/HTTPS Redirect Loop

    我似乎无法确保某些页面的安全,我想我已经尽了一切可能。。htaccess重定向iTheme安全插件将站点url更改为HTTPS://li>由于某种原因,这两个插件都不能强制SSL。它只是进入一个重定向循环。与更改类似。htaccess。然而,wooCommerce页面是安全的,我还可以通过HTTPS访问wordpress目录根中的页面,以及上传的内容。我应该从哪里开始查找,或者如何开始调试重定向循环?Wordpress是3.8.5版,主题为“BigBang 1.7.3”。插件列表:Advanced