避免使用循环访问单个帖子

时间:2013-01-26 作者:drake035

有时我想访问一个特定的CPT以从中提取一些内容,例如自定义字段值:

$group = new WP_Query( array( 
    \'post_type\' => \'group\',
    \'p\' => $group_id
) );
while ( $group->have_posts() ) : $group->the_post();
    $group_type = get_post_meta($post->ID, "group_type", $single = true);       
endwhile;
然而,循环的目的是访问多个元素,所以我不喜欢对单个帖子使用循环。有没有一种方法可以在不使用循环的情况下执行完全相同的操作(访问此自定义字段值)?

3 个回复
最合适的回答,由SO网友:Simon Blackbourn 整理而成

how about get_post?

$post       = get_post( $p );
$group_type = get_post_meta( $post->ID, \'group_type\', true );
SO网友:fuxia

你的WP_Query 对象包含一个帖子数组。请先进入:

get_post_meta( $group->posts[0]->ID, "group_type", true );
注:第三个参数get_post_meta() 需要关键字:truefalse, not $single = true. 这很有效,但看起来很奇怪。:)

SO网友:kaiser

只能使用循环的一半。嗯,这甚至不是一个循环,只是检查我们是否收到任何帖子。只需使用(WP\\u Query)objects方法。该示例将其封装在函数中,因此您甚至可以将其用作模板标记:

function wpse83212_get_group_post( $group_id )
{
    add_filter( \'post_limits\', \'wpse83212_group_post_limit\' );
    $group = new WP_Query( array( 
         \'post_type\' => \'group\'
        ,\'p\'         => $group_id
    ) );
    // Did the query return anything?
    if ( $group->have_posts() )
    {
        // Setup the post data
        $group->the_post();
        // Now we have access to the `$GLOBALS[\'post\']` object
        // as well as to any functions that only work inside the Loop:
        return get_post_meta( get_the_ID(), \'group_type\', true );
    }
    else
    {
        return NULL;
    }
}
function wpse83212_group_post_limit( $limit )
{
    remove_filter( current_filter(), __FUNCTION__, 10 );
    return 1;
}
然后只需在任何模板中使用它:$group_meta = wpse83212_get_group_post( 12 );. 如果现在的值为NULL 没有这样的职位。否则将返回单个值。

结束

相关推荐

Loop within a loop?

我在我的页面上使用了几个自定义的wp\\u查询循环,第一个循环从某个类别检索新闻,然后用permalink显示其中的一个小摘录。第二个是另一个wp\\u查询,它获取带有几个高级自定义字段的自定义帖子类型。问题是,我想在第二个循环中使用另一个循环,从新闻部分获取3篇文章,并带有缩略图(基本上与第一个循环相反,它将获取所有其他类别)。在阅读了无数关于循环的文章后,我不知道如何在第二个循环中创建“嵌套”循环。我相信这必须很简单,看起来很容易做到。下面是我的代码,其中去掉了很多html。<?php