我编写了一个查询,该查询应该返回名为“无图像”的所有附件(这是处理没有特征图像时图像回退的函数的一部分),如果我得到一些结果,该函数将返回第一项。
代码如下:
function misamee_get_image_placeholder($size, $icon = false, $attr = \'\')
{
$transient_key = \'image_placeholder_id\';
$result = get_transient($transient_key);
if (!$result || empty($result)) {
$image_name = "no-image";
$query_args = array(
\'post_type\' => \'attachment\',
\'post_status\' => \'inherit\',
\'post_title\' => $image_name
);
$query = new WP_Query($query_args);
//echo \'<pre>\' . print_r($query, true) . \'</pre>\';
if ($query->have_posts()) {
$post = $query->posts[0];
$result = $post->ID;
}
if ($result) {
set_transient($transient_key, $result, CONTENT_CACHE_LIFETIME);
return wp_get_attachment_image($result, $size, $icon, $attr);
}
}
return false;
}
问题是,此查询显然忽略了“post\\u title”参数,返回了所有附件,因此返回了上次上载的图像(请参阅
echo \'<pre>\' . print_r($query, true) . \'</pre>\';
).
我的问题是什么?
最合适的回答,由SO网友:s_ha_dum 整理而成
没有post_title
在里面WP_Query
\'s parameter list. 您需要使用name
, 它接受的是一个slug,而不是实际的帖子标题。
名称(字符串)-使用post slug。
看起来你所做的就是获取一个ID。如果这就是你所需要的,那么这是一个非常繁重的查询。您可以更改参数以使其变亮。
$query_args = array(
\'post_type\' => \'attachment\',
\'post_status\' => \'inherit\',
\'posts_per_page\' => 1, // since you seem to be using only the first result
\'ignore_sticky_posts\' => true, // don\'t juggle sticky posts to the top
\'no_found_rows\' => true, // don\'t calculate total returns
\'name\' => $image_name,
\'fields\' => \'ids\' // only return the post IDs
);