语法以获取自定义帖子类型列表中的第N项?

时间:2015-01-20 作者:hawbsl

我们有一个自定义的帖子类型testimonial 并希望在页面上的各种定制位置显示第一、第二和第三个。

如果我们只想循环介绍并一个接一个地展示推荐信,我们会这样做(这很有效):

<?php
$args = array(\'post_type\' => \'testimonial\');
$testimonials = new WP_Query( $args );
    while( $testimonials->have_posts() ) {
    $testimonials->the_post();
?>
    <li>
        <?php echo get_the_content(); ?>
    </li>

<?php }?>
但是只显示第一个或第三个或第n个?以下是迄今为止我们所得到的(获得第一个),这显然是错误的:

$args = array(\'post_type\' => \'testimonial\');
$testimonials = new WP_Query( $args );   
$testimonial1 =$testimonials[0]->the_post;
echo $testimonial1->the_content;
我们收到一个错误消息:

致命错误:无法将WP\\u Query类型的对象用作数组

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

如果只需要第三篇文章,请使用偏移量跳过前两篇文章,然后设置posts_per_page1 仅获取特定职位

你可以在你的论点中这样尝试

$args = array(
    \'post_type\' => \'testimonial\',
    \'offset\' => 2,
    \'posts_per_page\' => 1
);
$testimonials = new WP_Query( $args );
    while( $testimonials->have_posts() ) {
    $testimonials->the_post();
?>
    <li>
        <?php the_content(); ?>
    </li>

<?php }
wp_reset_postdata(); ?>
在我开始之前,请注意一下您的代码和我编辑的代码。(我已经编辑了我的原始代码以显示正常循环)。

您不需要使用echo get_the_content(). 你可以使用the_content() 直接地

请记住在循环后用重置postdatawp_reset_postdata().

根据评论中的要求,这里是不使用循环的替代语法。还有,先写一两个注释:

使用此替代语法,您不能使用模板标记,因为它们将不可用WP_Post 对象,并使用过滤器,如中所述link

您不需要重置postdata,因为您没有更改全局变量,您可以尝试

$args = array(
    \'post_type\' => \'testimonial\',
    \'offset\' => 2,
    \'posts_per_page\' => 1
);
$testimonials = new WP_Query( $args );

//Displays the title
echo apply_filters( \'the_title\', $testimonials->posts[0]->post_title );

//Displays the content
echo apply_filters( \'the_content\', $testimonials->posts[0]->post_content );

SO网友:birgire

您可以使用current_post 财产和rewind_posts() 的方法WP_Query 类,以定位相关的post对象。

您可以尝试使用以下示例(未测试):

if( $testimonials->post_count >= 3 )
{
    // First post:
    $nr = 1;
    if( isset( $testimonials->posts[$nr-1] ) )
    {
        $testimonials->rewind_posts();
        $testimonials->current_post = $nr - 2;
        $testimonials->the_post();
        the_title();
    }

    // Third post:
    $nr = 3;
    if( isset( $testimonials->posts[$nr-1] ) )
    {
        $testimonials->rewind_posts();
        $testimonials->current_post = $nr - 2;
        $testimonials->the_post();
        the_title();
    }

    // Second post:
    $nr = 2;
    if( isset( $testimonials->posts[$nr-1] ) )
    {
        $testimonials->rewind_posts();
        $testimonials->current_post = $nr - 2;
        $testimonials->the_post();
        the_title();
    }  

    wp_reset_postdata();
}    
你也可以这样使用它while 循环:

$testimonials = new WP_Query( $args );

// First post:
$nr = 1; 
while( $testimonials->have_posts() && ( $nr - 2 ) === $testimonials->current_post ) {
    $testimonials->the_post();
    // ...
}

// Third post:
$nr = 3;
$testimonials->rewind_posts();
while( $testimonials->have_posts() && ( $nr - 2 ) === $testimonials->current_post ) {
    $testimonials->the_post();
    // ...
}

// Second post:
$nr = 2;
$testimonials->rewind_posts();
while( $testimonials->have_posts() && ( $nr - 2 ) === $testimonials->current_post ) {
    $testimonials->the_post();
    // ...
}

wp_reset_postdata();   

结束

相关推荐

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

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