如何在主循环上获取每种帖子类型可变数量的帖子?


8

我正在寻找一种平衡博客主页内容的方法:

该博客有一些帖子类型,例如Poscast,视频和Blog,我想在首页上说10个帖子,但我想使其中5个始终是最新的Blog。

制作3个单独的盒子并不能解决我的问题,因为帖子混在一起,而且其他类型的帖子也不会总是那么多。

我可以想到在纯PHP上解决该问题的解决方案,但我想了解如何使用wordpress API进行此操作的想法,欢迎您提供任何帮助,参考!


是的,这远非有效或“正确的方法”,但无论如何+1。感谢您为显示自己想要实现的目标而付出的努力。:)
kaiser 2012年

1
我建议您使用标准的处理方式-辅助循环;只需发出3 get_posts型查询;这些将带来缓存(无论哪个后端可用)和安全性等附加优势。我确定您已经看到了codex.wordpress.org/The_Loop#Multiple_Loops
soulseekah 2012年

+ 1为您的努力!
罗特威克·冈古德

Answers:


1

如果您仍在寻找更快的替代方法,则可以帮助您:

<?php
function customBlogFeed() {

// The Query 
$the_query = new WP_Query( array ( 'post_type' => array( 'post', 'page', 'movie', 'book'), 'posts_per_page' => '6' ) );
//Your post_type array is a list of random post_types. You can add whatever you'd like to match your system.

// The Loop 
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>


  <?php the_title(); ?>
      <?php the_content(); ?>

<?php endwhile;

// Reset Post Data
wp_reset_postdata();
}
?>

然后将其放置<?php customBlogFeed(); ?>在您想要输出的任何地方。

如果您真的想花哨的话,可以加入post_limits过滤器并限制每种帖子类型显示多少帖子。希望这对您的追求有所帮助。

PS-查看WP_Query,它将真正帮助您。

经过一些研究,您实际上可能想研究post_clauses,以使用WP3.1 +语法完成这些SQL表征。


1

所以,几个月后。我找到了您确切问题的答案:

add_action('pre_get_posts', 'custom_main_query', 1);
function custom_main_query( $query ) {
  if ( $query->is_main_query() && is_home() ) { 
  //be super careful with this and to be safe, keep the is_home() 
  //bit there, I've had some funny results without it.

    $query->query_vars['posts_per_page'] = 3; //displays 3 posts ;)
    $query->query_vars['post_type'] = array('post'); //and if you wanted multiple cpts <3

    return $query;

    }
}

干杯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.