获取当前帖子子类别的ID

时间:2014-02-27 作者:Poisontonomes

我的一个客户想创建一个简单的“相关帖子”循环,显示与当前帖子类别匹配的6篇最新帖子。问题是,他们的每个帖子都有相同的父类别,然后使用该类别的子类别进行组织,因此只需使用get_the_category 正如我所做的那样,这是行不通的,因为他们都有相同的父母。

所以,我的问题是,有没有一种方法可以让我获得当前帖子最低级别子类别的ID,但忽略它的父类别?

例如,如果您正在查看具有以下类别结构的帖子;

- Parent Category
    - First Child Category
        - Second Child Category
我怎样才能得到Second Child Category 而忽略了它的父母?

2 个回复
SO网友:sri

Display every grandchildren 在wordpress支持论坛上似乎非常接近。

以下是提出的解决方案:

<ul>
<?php $all = get_pages();   //You could use $args to retrieve posts how you want.
foreach($all as $all) { 
 if($all->post_parent) { 
  if( get_page($all->post_parent)->post_parent ) { 
   $tp = get_page($all->post_parent);
   if( !get_page( $tp->post_parent )->post_parent) { $grandchild_ids[] = $all->ID; }    //catching all the ids of grandchild or secondchild.
  }
 }
}

//Usual args parameter & WP_Query loop
$args = array(
    \'post_type\' => \'page\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => 5,
    \'orderby\' => \'rand\',
    \'post__in\' => $grandchild_ids
  );
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) { 
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
    <?php endwhile;
} 
wp_reset_query(); ?>
</ul>
总之,你会从所有父母的孙子孙女名单中随机获得5条帖子。

SO网友:Qaisar Feroz

虽然@sri answer 帮助,这里有一个函数,即使深度大于2,也可以获得最深的类别。(摘自并修改自this answer.). 此函数使用wordpress的函数get_ancestors().

function get_deepest_term($post_id){

    $the_terms = get_the_terms( $post_id, \'Category\' );

    if ( $the_terms && ! is_wp_error( $the_terms ) ) {

        $deepest = $the_terms[0];
        $depth = 0;
        $term_depth= 0;

       // Find the deepest term
       foreach( $the_terms as $term ) {
           $term_ancestors = get_ancestors( $term->term_id, \'Category\' );
           if ( $term_ancestors ) {
               $term_depth = count( $term_ancestors );
           }
           else $term_depth= 0;

           if ( $term_depth > $depth ) {
               $depth = $term_depth;
               $deepest = $term;
           }

       } // END: foreach( $the_terms as $term ) 

   }  // END: if ( $the_terms && ! is_wp_error( $the_terms ) ) 

    return $deepest;
}   // END: function get_deepest_term($post_id)
然后,可以使用上述函数循环遍历最深类别的帖子,如下所示(代码取自@sri answer):

<?php

//Usual args parameter & WP_Query loop
$args = array(
    \'post_type\' => \'post\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => 5,
    \'orderby\' => \'rand\',
    \'post__in\' => array(get_deepest_term( get_the_ID() )->term_id)
);

$my_query = new WP_Query($args);
if( $my_query->have_posts() ) { ?>
   <ul>

       <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
           <li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
       <?php endwhile;
      wp_reset_post_data();

} // END: if( $my_query->have_posts() ) ?>
   </ul>
所以,我的问题是,有没有一种方法可以让我获得当前帖子最低级别子类别的ID,但忽略它的父类别?

   $lowest_tier_child_category = get_deepest_term( get_the_ID() )->term_id

结束

相关推荐

检查自定义分类是否有带有GET_CATEGORIES()的帖子

我正在使用get_categories 列出我的分类法的所有术语“genre“,但我有另一种分类法叫做”brands“。在品牌页面中(taxonomy-brands.php) 我需要返回品牌和相关流派的所有帖子。For example, I have a taxonomy page for Ferrari:. 品牌名称:法拉利..类型:红色、黄色But I also have a taxonomy page for Wolkswagen:. 品牌名称:Wolkswagen..类型:蓝色、绿色问题是,法拉利