EXPLANATION
如上所述,要检索缩略图的ID
get_post_meta 函数可以在没有任何额外DB开销的情况下使用。获取缩略图id的url的“常规”方法是
wp_get_attachment_image_src 或类似的函数,但这些函数不接受ID数组。
我注意到,使用wp\\u get\\u attachment\\u image\\u src时,每次调用都会创建两个查询(每个缩略图的遍历),一个用于获取帖子数据,另一个用于实际url。
SOLUTION
我发现的同时检索多个url的唯一解决方案是通过
wpdb.
对于关系post->缩略图,有一个postmeta条目,该条目带有meta\\u键,缩略图id为meta\\u值,然后每个缩略图有两个以上的条目,其中meta\\u标记为wp\\u attachment\\u metadata和wp\\u attached\\u file,缩略图id为post\\u id。
因此,Posteta表中有趣的部分如下所示:
meta_id post_id meta_key meta_value
328 136 _wp_attached_file 2015/01/Dog-w-Glasses.jpg
329 136 _wp_attachment_metadata a:5{s:5:"width";i:...
...
335 138 _thumbnail_id 136
138是帖子的id,meta\\u id与本例无关。
由于缩略图id链接到post\\u id,因此可以通过get\\u post\\u meta检索,但由于实际url存储在缩略图id下,因此必须单独检索。
因此,我所做的是通过get\\u post\\u meta检索每个帖子的所有缩略图ID,然后创建对WP数据库的postETA表的查询:
$thumb_ids = \'( 23, 89, 24, 69 )\'; // just an example
global $wpdb;
$qstr =
"SELECT post_id, meta_value
FROM $wpdb->postmeta
WHERE post_id IN " . $thumb_ids. \' AND meta_key = "_wp_attached_file"\';
$results = $wpdb->get_results( $qstr, ARRAY_N );
这将以非关联数组的形式返回结果,有关该函数参数的更多信息,请参阅wpdb页面。
这样,只使用一个额外的DB调用来检索所有帖子的所有URL。
p.s.: 我用过Query Monitor 和Debug Bar 分析DB查询。