每个帖子都添加自定义帖子类型

时间:2013-07-15 23:31:08

标签: php wordpress

我希望有人可以帮我解决这个问题。我想在我的WordPress循环中添加自定义帖子类型(见证)并每隔几个帖子显示一个。我使用pre_get_posts操作将自定义帖子类型添加到循环中,它们显示在循环中,但我想将这个帖子类型分散到帖子中而不是将它们放在一起。有没有办法做到这一点?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果我正确阅读,您会收到一条查询,其中包含常规帖子和自定义帖子类型推荐。所以理论上你可以提取10个结果,所有这些都是帖子,或者所有这些都是推荐,这取决于你的搜索条件。

你可能想要做的是做两个查询,一个用于帖子,一个用于推荐。这将为您提供两个post对象数组,然后很容易循环并显示一种类型或另一种类型,具体取决于递增的计数器。

非常粗略,如:

$args = array('post_type'=>'post', 'posts_per_page'=>9, 'category_name'=>'news);
$posts = get_posts($args);

$args = array('post_type'=>'testimonials', 'posts_per_page'=>3);
$testimonials = get_posts($args);

/** see how many of the regular posts you got back */
$post_count = count($posts);
/** see how many testimonials you got back */
$testimonial_count = count($testimonials);
/** add them up to get the total result count */
$total_count = $post_count + $testimonial_count;

/** Loop through the total number of results */
for($i = 1; $i <= $total_count; $i++){

/** assuming you want to show one testimonial every third post */
if($i % 3 == 0){
  /** this means you're on the a third post, show a testimonial */
  setup_postdata($testimonials[$i]);
}
else{
  /** show a regular post */
  setup_postdata($posts[$i]);
}

/** and now handle the output */
?><h1><?php the_title();?></h1><?php

}

在这个例子中,它总共拉了12个帖子 - 9个帖子和3个推荐 - 然后每三个帖子显示一个推荐。它假设你实际上每个都有正确的数字。如果您只收到两个推荐信,那么您会收到错误,因此您需要在三元运算符之后使用一些代码完成一个生产网站,以确保存在匹配的推荐,如果没有显示常规等等,但应该让你朝着正确的方向前进。