WP_QUERY返回的结果多于预期

时间:2013-04-30 作者:Andrea Sciamanna

我编写了一个查询,该查询应该返回名为“无图像”的所有附件(这是处理没有特征图像时图像回退的函数的一部分),如果我得到一些结果,该函数将返回第一项。

代码如下:

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>\';).

我的问题是什么?

1 个回复
最合适的回答,由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
);

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post