我在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是空的?
答案 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__and
,category__in
和category__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的建议完成了这个伎俩。我没有考虑税务查询。猜猜我还有更多的阅读资料。 : - )
感谢您的教训和解决方案。