Wordpress:get-posts是空的

时间:2015-12-21 16:42:53

标签: wordpress

我在Wordpress中创建了一个自定义帖子类型并为其创建了分类。现在我想显示分类法 - 术语,并在每个术语下显示具有该术语的帖子。 我正在尝试使用get_posts,但get-posts只是空了。这是我的代码,其中包含对发生的事情的评论:

<?php
//for each category, show all posts
$cat_args=array(
  'orderby' => 'name',
  'order' => 'ASC',
  'taxonomy' => 'teachres-categorie',
  'post_type'=> 'biology'
);

$categories=get_categories($cat_args);

foreach($categories as $category) {
$args=array(
   'showposts' => -1,
   'category' => array($category->term_taxonomy_id),
   'ignore_sticky_posts'=>1,
   'post_type'=> 'biology', 
   'taxonomy' => 'teachres-categorie'
 );
 ?> 

 <h2><?php  echo '<p>Category: <a href="' . get_category_link($category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '" ' . '>' . $category->name.'</a> </p> ';?></h2>
 <p><?php echo $category->term_taxonomy_id; ?></p> 

 //this gets displayed just fine, meaning $category-array is filled

 <?php
 $posts = get_posts($args);

 //at this point $args is filled: Array ( [showposts] => -1 [category] => Array ( [0] => 34 ) [ignore_sticky_posts] => 1 [post_type] => biology [taxonomy] => teachres-categorie ) 
 //at this point $posts is empty: Array ( ) 

   if ($posts) {

    //This never gets executed as $posts is empty

     foreach($posts as $post) {
    // ...so we'll never get to here            

     } // end foreach($posts
   } // end if ($posts
 } // // end foreach($categories
?>

除了这段代码,我没有改变主后查询,这些是页面上唯一的循环。当我搜索这个问题时,有更多的人遇到同样的问题,但他们的解决方案都没有对我的情况有所帮助。

有谁能告诉我为什么get_posts是空的?

3 个答案:

答案 0 :(得分:1)

您的get_posts参数中的错误很少。根据您的意见考虑您实际上有以下内容:

$posts = get_posts(array(
   'showposts' => -1,
   'category' => array(0 => 34),
   'ignore_sticky_posts' => 1,
   'post_type'=> 'biology', 
   'taxonomy' => 'teachres-categorie'
));
  • category参数需要一个整数(类别的id)或包含逗号分隔的类别ID列表的字符串。 From the doc

      

    类别参数可以是逗号分隔的类别列表,因为get_posts()函数将“category”参数直接传递给WP_Query作为“cat”。

    然后,如果您查看WP_Query文档,您会看到类别的数组值仅适用于category__andcategory__incategory__not_in参数。我认为这就是为什么您的查询不首先检索任何帖子的原因。

  • taxonomy参数不存在。在发送分类标本之前有一个tax参数,但自版本3.1以来它已被弃用。如果您想根据分类词查询帖子,请使用tax_query参数。

答案 1 :(得分:0)

我会使用tax_query而不是您尝试按帖子args中的类别获取帖子的方式。 posts_per_page也取代了showposts,但它可能并不那么重要。试试这个:

$args = array(
   'posts_per_page' => -1,
   'ignore_sticky_posts' => 1,
   'post_type'=> 'biology', 
   'tax_query' => array(
       array(
       'taxonomy' => 'teachres-categorie',
       'field' => 'term_id',
       'terms' => $category->term_id,
       ),
    )
);

$posts = get_posts($args);

这些参数将查询所有具有term_id(循环内类别的id)的帖子,检索该类别术语中的所有帖子。

同样@vard对类别参数提出了一个很好的观点,我认为它可以回答你关于它可能无效的问题。

答案 2 :(得分:0)

感谢@vard明确解释。出错的地方更清楚了。

@ JoeMoe1984的建议完成了这个伎俩。我没有考虑税务查询。猜猜我还有更多的阅读资料。 : - )

感谢您的教训和解决方案。