我正在尝试获取一个类别并遍历其子类别,从每个子类别中获取一个帖子。以下是我的代码:
<?
$homepage_cat = get_category_by_slug( 'home-page-slider' );
$id = $homepage_cat->cat_ID;
print($id);
$sub_cat = get_categories('hide_empty=0&child_of=' . $id);
print_r($sub_cat);
foreach ($sub_cat as $key => $cat)
{
echo $cat->term_id;
query_posts('cat=' . $cat->term_id);
if ( have_posts() )
{ echo '<h1> HELL YEAH </h1>';
while ( have_posts() )
{
echo '<h1>' get_the_title(); '</h1>';
} // end while
} // end if
} //end foreach
?>
由于HELL YEAH
未被回复,因此代码不会撤回任何帖子。有人可以提出解决方案吗?
答案 0 :(得分:1)
使用get_posts()
而不是query_posts
,这种情况会更好。
$args = array('posts_per_page' => 1, 'category' => $cat->term_id);
$posts = get_posts($args);
foreach($posts as $post) : setup_postdata( $post ) ?>
<h1><?php get_the_title(); ?></h1>
<?php endforeach; ?>
答案 1 :(得分:0)
这里有很多问题
首先,永远不要使用query_posts
来构建自定义查询。它破坏了主要查询,不可靠,在大多数情况下在分页中完全失败
其次,您必须在每次自定义查询后重置您的postdata
第三,永远不要使用短标签。始终使用完整标记,即<?php
,而不只是<?
最后,您缺少应该返回帖子对象的the_post()
您的查询应该是这样的
<?php
$homepage_cat = get_category_by_slug( 'home-page-slider' );
$id = $homepage_cat->cat_ID;
print($id);
$sub_cat = get_categories('posts_per_page=1&hide_empty=0&child_of=' . $id);
print_r($sub_cat);
foreach ($sub_cat as $key => $cat)
{
echo $cat->cat_ID;
$q = new WP_Query('cat=' . $cat->cat_ID);
if ( $q->have_posts() )
{ echo '<h1> HELL YEAH </h1>';
while ( $q->have_posts() )
{
$q->the_post();
echo '<h1>' get_the_title(); '</h1>';
} // end while
} // end if
wp_reset_postdata();
} //end foreach
?>
答案 2 :(得分:-1)
替换此
$post_args = array(
'showposts' => 1,
'cat' => $cat->term_id
);
有了这个。
$post_args = array(
'posts_per_page' => 1,
'category' => $cat->term_id
);
我希望它能够发挥作用。