我正在尝试使最新的帖子成为完整的帖子。该帖子可以来自两种不同的帖子类型“ post”和“ tutorial”。我还想显示四个摘录,两个摘录来自“ post”帖子类型,两个摘录自“ tutorial” post类型。我不想在摘要中重复完整的帖子。
我尝试使用一个WP_Query,这几乎使我明白了。我也尝试过使用多个WP_Query,但这并不是那么幸运。
$args = array(
'post_type' => array( 'post', 'tutorial' ),
'post_per_page' => 5
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) :
$count = 0;
while ( $query->have_posts() ) : $query->the_post();
if ( $count == 0 ) { ?>
<h2><?php the_title(); ?></h2>
<?php the_content();
$count ++;
} else { ?>
<h2><?php the_title(); ?></h2>
<?php the_excerpt();
}
endwhile;
endif;
wp_reset_postdata();
?>
所以这段代码使我非常接近。但是摘录不是我想要的。我希望它显示两个“帖子”摘录和两个“教程”摘录。现在显示的是“指南”的一个摘录和“帖子”的三个摘录。
答案 0 :(得分:2)
在一个查询中设置该任务要复杂一些。我为您编写了一个代码,其中包含每个步骤的注释。请检查一下。
// first get last published post
$last_post = get_posts(
array(
'post_type' => array( 'post', 'tutorial' ),
'numberposts' => 1
)
);
// get two posts excluding $last_post which might be a post
$last_two_posts = get_posts(
array(
'post_type' => array( 'post' ),
'numberposts' => 2,
'exclude' => array($last_post[0]->ID)
)
);
// get two tutorial excluding $last_post which might be a tutorial
$last_two_tutorials = get_posts(
array(
'post_type' => array( 'tutorial' ),
'numberposts' => 2,
'exclude' => array($last_post[0]->ID)
)
);
$posts = array_merge($last_post, $last_two_posts, $last_two_tutorials);
foreach( $posts as $post ) {
setup_postdata($post);
// print content only for first post and excerpt for others
if ($post->ID == $last_post[0]->ID) {
the_content();
} else {
if($post->post_type == 'post') {
echo '<div class="post-excerpt">' . get_the_excerpt() . '</div>';
} else {
echo '<div class="tutorial-excerpt">' . get_the_excerpt() . '</div>';
}
}
}
wp_reset_postdata();