我正在开发一个快捷码,它将创建特定类型的所有自定义帖子的网格。如果我只得到帖子标题,这一切都很好。然而,如果我添加帖子缩略图,我将从大约28个查询移动到大约1000个查询。
通过查询监视器查看查询时,我可以看到get_the_post_thumbnail( $post->ID, \'medium\' )
重复328次。再加上它呼叫wp_attachment_is()
, wp_get_attachment_url()
和wp_get_attachment_metadata()
这是代码的重要部分
$args = array(
\'post_type\' => \'zxy_movie\',
\'post_status\' => \'publish\',
\'orderby\' => \'post_title\',
\'order\' => \'ASC\',
\'posts_per_page\' => - 1,
);
$posts = get_posts( $args ); // 332
$output = \'\';
if ( $posts && count( $posts ) > 0 ) {
foreach ( $posts as $post ) {
$output .= \'<div class="zxy-item">\';
$output .= \'<a href="\' . get_permalink( $post->ID ) . \'">\';
$output .= \'<div class="zxy-image">\';
$output .= get_the_post_thumbnail( $post->ID, \'medium\' );
$output .= \'</div>\';
$output .= \'<div class="zxy-title">\';
$output .= $post->post_title;
$output .= \'</div>\';
$output .= \'</a>\';
$output .= \'</div>\';
}
}
return $output;
因此,这里的任何人都可以为我提供任何提示、技巧、想法和/或解决方案,以减少获取帖子缩略图所需的查询数量。
最合适的回答,由SO网友:wzy 整理而成
在回答我自己的问题时,我决定采用纯SQL查询路线,因为WP在获取帖子及其附加的帖子缩略图时运行了太多的查询,此外还为该缩略图获取和构建元数据。
以下是我最终得到的代码:
$query2 = "SELECT post.ID, post.post_title, thumbnail_url.meta_value as thumbnail_url
FROM $wpdb->posts as post
LEFT OUTER JOIN $wpdb->postmeta as thumbnail
ON post.ID = thumbnail.post_id AND thumbnail.meta_key = \'_thumbnail_id\'
LEFT OUTER JOIN $wpdb->postmeta as thumbnail_url
ON thumbnail.meta_value = thumbnail_url.post_id
AND thumbnail_url.meta_key = \'_wp_attached_file\'
WHERE 1 = 1
AND post.post_type = \'zxy_movie\'
AND post.post_status = \'publish\'
ORDER BY post.post_title ASC";
$posts = $wpdb->get_results( $query2, OBJECT );
请注意:这仍然是一个昂贵的查询,我不建议在大型网站上使用。