从自定义帖子类型中获取类别

时间:2016-04-17 14:53:28

标签: php wordpress custom-post-type taxonomy

我买了一个Wordpress主题,希望经过一些代码定制后,它应该实现我想要的。

现在,我(我相信它是)一种名为' Portofolio'的自定义帖子类型。如下图所示,它具有portofolio条目(在所有portofolio中)和上述portofolio条目的类别。

enter image description here

我想要实现的是在自定义模板页面上列出portofolio的所有类别。到目前为止,我有这个代码,但它所做的只是获取portofolio的条目而不是类别。

    <?php
//$args = array('post_type' => 'tm_portfolio');
$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'ids'] );
$args = [
    'tax_query' => [
        [
            'taxonomy' => 'tm_portfolio_category',
            'terms' => $term_ids
        ]
    ]
];
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  echo 'List of categories';
  while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <p><a href="<?php the_permalink() ?>" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php
  endwhile;
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>

正如您在代码中看到的那样,作为第一行,我尝试从自定义帖子类型中获取,但我得到了相同的结果。

我通过在添加类别时检查管理面板中的链接来找出帖子类型/分类的名称/ slug(查看下面的图片)。 enter image description here

1 个答案:

答案 0 :(得分:1)

我没有太多关注代码,但我从一开始就看到这条线路不对。

$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'ids'] );

应该是&#34; id&#34;

e.g。

$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'id'] );

修改

抱歉,我的不好,

您可以尝试这种方法

$term_ids = get_terms( 'tm_portfolio_category', ['fields' => 'ids'] );

$posts = query_posts( array(
    'post_type' => 'tm_portfolio',
    'tax_query' => array(
        array(
            'taxonomy' => 'tm_portfolio_category',
            'terms'    => $term_ids,
            )
        )
    ));

foreach ($posts as $post) {
   echo 'List of categories';
   ?>
   <p><a href="<?php echo get_permalink($post->ID); ?>" title="Permanent Link to <?php echo the_title_attribute(array('post'=>$post->ID)); ?>">
   <?php echo get_the_title($post->ID); ?>
    </a></p>
   <?php
}
wp_reset_query();

为了灵活起见,我不建议在这种情况下使用原生WordPress循环。

我已经在我的测试中测试了它,它似乎正在工作。您可能需要重新查看使用get_terms时返回的内容,因为返回的数组可能会以与查询参数的接收方式不同的方式编制索引。

修改

抱歉,我觉得我一直在想错过最初的问题。

$terms = get_terms( 'tm_portfolio_category' );

会给你一个术语列表。

foreach ($terms as $term) {
    ?>
    List of categories
    <p>
        <a href="<?php echo $term->slug; ?>" title="Permanent Link to <?php echo $term->name ?>" ><?php echo $term->name ?></a>
    </p>
    <?php 
}

?>

下面应该可以为您提供所需的结果,而无需创建其他查询。