我的问题是关于通过get\\u posts检索自定义post类型,而自定义post类型也有自定义分类法。我可以使用get\\u posts检索自定义帖子类型的所有帖子,但当我尝试按类别筛选帖子时,没有得到任何结果。
因此,我认为要么我为自定义帖子类型注册自定义分类法的方式有问题,要么我混淆了类别和分类法,要么两者都有问题。
要检索自定义帖子类型“books”的随机帖子,我的代码如下所示:
$posts = get_posts(array(
\'numberposts\' => -1,
\'orderby\' => \'rand\',
\'post_type\' => \'books\'
));
if($posts)
{
foreach($posts as $post)
{
// output various things
}
}
但是如果我在参数列表中添加
\'category\' => 3,
。。。什么都没有出现。我知道有些“书”的标签或类别为3,标签id=3。当我将鼠标悬停在“自定义分类法”区域中的术语上时,会得到以下链接:
http://ourwebsite.ca/wp-admin/edit-tags.php?action=edit&taxonomy=books_taxonomy&tag_ID=3&post_type=books
在我看来,除非类别和自定义帖子分类法是两件不同的事情,否则它应该工作得很好。但是,如果是这样的话,我不知道如何根据分类法获取自定义帖子。
下面是我如何为“books”注册自定义分类法的
function books_taxonomy() {
register_taxonomy(
\'books_taxonomy\',
\'books\',
array(
\'hierarchical\' => true,
\'label\' => \'Books Set\',
\'query_var\' => true,
\'rewrite\' => array(\'slug\' => \'books\')
)
);
}
有谁能建议我按分类术语筛选“书籍”列表?提前非常感谢!
SO网友:Chip Bennett
请注意category
和post_tag
都是分类法,它们是默认情况下仅由post
岗位类型。您已经创建了自定义的帖子类型,并注册了对其自定义分类的支持:books_taxonomy
.
因此,使用books
职位类型和category
分类法不会返回任何结果:因为books
post类型不支持category
分类学
相反,您需要查询自定义分类法。
请注意get_posts()
只是一个包装WP_Query()
, 使用时,自定义查询通常更易于编写/使用WP_Query()
直接地所以,以下是您将如何query for your CPT and custom taxonomy:
$books_query_args = array(
// Post Type
\'post_type\' => \'books\',
// Posts per page - note: use instead of numberposts
\'posts_per_page\' => -1,
// Orderby
\'orderby\' => \'rand\',
// Taxonomy query
\'tax_query\' => array(
array(
\'taxonomy\' => \'books_taxonomy\',
\'field\' => \'id\',
\'terms\' => array( 3 )
)
)
);
$books_query = new WP_Query( $books_query_args );