无法根据CPT的自定义分类拉入自定义帖子类型的帖子

时间:2013-10-29 作者:robfresh

我的问题是关于通过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\')
        )
    );
}
有谁能建议我按分类术语筛选“书籍”列表?提前非常感谢!

1 个回复
SO网友:Chip Bennett

请注意categorypost_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 );

结束

相关推荐

Ordering Subcategories

我使用以下代码显示子类别中的数据。子类别为“英国”、“仅英格兰”、“仅北爱尔兰”、“仅苏格兰”、“仅威尔士”。按日期或asc/desc排序,英国子类别位于中间位置,威尔士或英格兰位于顶部。我需要英国子类别位于顶部。它拥有最多的帖子-那么可以在查询中使用orderby来解决这个问题吗?或者你认为我只需要为UK子类别创建自己的循环吗?$parentCatID = get_cat_ID(\'Grants and Incentives\'); $childCats = get_categories( \'