带有大量结果集的WordPress“循环”

时间:2013-01-22 作者:JSP

我不确定合适的术语,但我有一个wordpress“循环”,用于自定义帖子类型,它有大约300个结果,所有结果都显示在一个页面上(无分页)。由于“循环”中的每个“post”都有N个数据库调用(标题、has\\u post\\u缩略图、get\\u post\\u缩略图、id、\\u内容、get\\u post\\u meta等),因此会在DB服务器上造成巨大的负载。wordpress优化这个的方法是什么?对于这样的情况,大多数开发人员是直接使用$wpdb进行查询,还是wordpress可以缓存页面并继续?我考虑直接进行$wpdb sql查询,但获取相关数据(尤其是与帖子相关的图像)并不那么直观。

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

您可以使用Transients API 要缓存整个HTML输出,以便不在每次加载页面时都执行查询,请执行以下操作:

$transient = \'my-300-posts\';
$timeout   = 3600; // 1 hour

if ( false === $out = get_transient( $transient ) ) {

    $args = array( YOUR ARGS GO HERE );
    $posts = get_posts( $args );
    if ( $posts ) {
        foreach ( $posts as $post ) {
            $out .= get_the_title( $post->ID );
            $out .= // whatever else you want to output...
        }
    }

    if ( $out ) {
        set_transient( $transient, $out, $timeout );
    }

}

echo $out;
然而,您仍然在一个页面加载上提供300个帖子缩略图,这需要传输大量数据。

(您还需要删除save_postdelete_post 挂钩)

也许你最好使用无限滚动?这是Jetpack 插件。

结束

相关推荐

Loop within a loop?

我在我的页面上使用了几个自定义的wp\\u查询循环,第一个循环从某个类别检索新闻,然后用permalink显示其中的一个小摘录。第二个是另一个wp\\u查询,它获取带有几个高级自定义字段的自定义帖子类型。问题是,我想在第二个循环中使用另一个循环,从新闻部分获取3篇文章,并带有缩略图(基本上与第一个循环相反,它将获取所有其他类别)。在阅读了无数关于循环的文章后,我不知道如何在第二个循环中创建“嵌套”循环。我相信这必须很简单,看起来很容易做到。下面是我的代码,其中去掉了很多html。<?php