在实际输出之前,最好先预加载当前页面的所有图像。然后将查询从n*2
(每个get image调用实际上有两个数据库查询,一个来自wp_posts
表,另一个来自wp_postmeta
) 降到只有两个。
$images = [];
foreach ( $pages as $page )
$images[] = ( int ) get_post_meta( $page->ID, \'image_field\', true );
if ( $images = array_filter( $images ) ) {
new WP_Query([
\'post__in\' => $images,
\'posts_per_page\' => -1,
\'no_found_rows\' => true,
\'post_status\' => [ \'publish\', \'inherit\' ],
\'post_type\' => \'attachment\',
]);
}
这只是为了演示,但其思想是您构建一个仅包含图像ID的数组,然后使用查询将它们一次全部拉入内存。对上述ID的后续映像函数调用将命中缓存而不是数据库。