自定义分类-修改函数以获取子类别

时间:2020-12-16 作者:JoaMika

我正在使用这两个函数,从而获得自定义分类法的顶级父类别。这些已经过测试,并按预期工作。

然而,现在我正在寻找一种方法来输出子类别而不是父类别。

function get_term_top_most_parent( $term, $taxonomy ) {
    // Start from the current term
    $parent  = get_term( $term, $taxonomy );
    // Climb up the hierarchy until we reach a term with parent = \'0\'
    while ( $parent->parent != \'0\' ) {
        $term_id = $parent->parent;
        $parent  = get_term( $term_id, $taxonomy);
    }
    return $parent;
}

function get_top_parents( $taxonomy ) {
    // get terms for current post
    $terms = wp_get_object_terms( get_the_ID(), $taxonomy );
    $top_parent_terms = array();

    foreach ( $terms as $term ) {
        //get top level parent
        $top_parent = get_term_top_most_parent( $term, $taxonomy );
        //check if you have it in your array to only add it once
        if ( !in_array( $top_parent, $top_parent_terms ) ) {
            $top_parent_terms[] = $top_parent;
        }
    }

    // build output (the HTML is up to you)
    foreach ( $top_parent_terms as $term ) {
          //Add every term
          $output = $term->slug;
    }

    return $output;
}

1 个回复
最合适的回答,由SO网友:tiago calado 整理而成

如果是针对产品类别,则此函数只需要类别id即可知道子项:

function cat_childs( $term_id = 0) {
  $children = get_terms( array(
        \'child_of\'      => $term_id,
        \'taxonomy\'      => \'product_cat\',
        \'hide_empty\'    => true,
        \'fields\'        => \'ids\',
  ));
return ( $children );
}
可以这样称呼:

cat_childs(1234);
因为它可以返回多个,我们可以先使用

$a = cat_childs(1234);
echo \'<pre>\';
print_r($a);
如果是这样的话,我们只需要做一个foreach循环就可以得到它们。

这是我的代码,在第三代之前,我都会用它们制作一个菜单,它使用cat\\u childs()函数来检查是否需要下一个循环。

$cat_args = array( \'orderby\' => \'name\', \'order\' => \'asc\', \'hide_empty\' => true);
$cats = get_terms( \'product_cat\', $cat_args );
foreach ($cats as $key => $cat):
  if ($cat->parent == 0): ?>
    <p><a href="<?php echo get_term_link($cat) ?>"  style="color:red;"><?php echo $cat->name; ?></a></p><?php
    if (cat_childs($cat->term_id)):
      foreach ($cats as $key => $cat2):
        if ($cat2->parent == $cat->term_id): ?>
          <p><a href="<?php echo get_term_link($cat2) ?>" style="margin-left:20px;  color:blue;"><?php echo $cat2->name; ?></a></p><?php
          if (cat_childs($cat2->term_id)):
            foreach ($cats as $key => $cat3):
              if ($cat3->parent == $cat2->term_id): ?>
                <p><a href="<?php echo get_term_link($cat3) ?>" style="margin-left:40px; color:green;"><?php echo $cat3->name; ?></a></p><?php
              endif;
            endforeach;
          endif;
        endif;
      endforeach;
    endif;
  endif;
endforeach;

相关推荐

Trim posts from WP-Query?

我希望在我的首页上显示一些由以下标准确定的帖子:显示当月的所有帖子(实际上是从最近帖子对应的月份开始);但是如果这个数字少于(比如)8,那么就显示最近的8篇帖子。假设我知道每个月都不会有超过(比如)20篇文章,我会将posts\\u per\\u page设置为20,通常抓取最近的20篇文章,然后在php中进行适当的修剪(切片)。(在SQL中这样做似乎太复杂了)顺便说一句:起初我以为add_filter( \'posts_results\', ... ) 这很合适,但很难区分查询是与主循环相对应,还是与其