从子类别页面获取自定义分类的父类别ID

时间:2020-03-05 作者:Rajkumar S

我已经为类别创建了自定义分类法。我想在子页面中列出当前父类别的子类别列表。

$cateID = get_queried_object_id();    
$args = array(
  \'format\' => \'name\',
  \'separator\' => \' \',
  \'link\' => false,
  \'inclusive\' => true
);
$checkparent =  get_term_parents_list( 
 $cateID, \'my-taxonamy\' , $args
); 
我已经尝试了上述代码。但代码返回父类别名称/链接。有没有办法在子类别页面中获取父类别id?wordpress中有没有获取父类别id的方法或挂钩?

示例案例:

如果我在child category1 第页,要列出以下类别。

子类别1问题:我无法从子类别中获取父类别id。

提前感谢;)

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

在分类法归档页面上,无论是子术语还是父术语,都可以使用get_queried_object() 包含以下属性term_id (术语ID)和slug (术语slug)。父项ID的属性名称为parent. 因此,您可以这样做以获取父项的术语ID:

$cat = get_queried_object();
$parent_cat_id = $cat->parent;
要在父术语中显示术语列表,可以使用wp_list_categories(). 下面是一个示例title_li 设置为\'\'echo 设置为0, 这意味着我正在手动将输出放入UL (<ul></ul>):

$cat = get_queried_object();

$list = wp_list_categories( [
    \'taxonomy\' => $cat->taxonomy,
    \'child_of\' => $cat->parent,
    \'title_li\' => \'\',
    \'echo\'     => 0,
] );

if ( $list ) {
    echo "<ul>$list</ul>";
}
如果您想完全控制HTML,例如在术语链接之前/之后添加自定义HTML,或者添加自定义CSS类,您可以使用get_terms() 并循环遍历术语对象以显示术语:

$cat = get_queried_object();

$cats = get_terms( [
    \'taxonomy\' => $cat->taxonomy,
    \'child_of\' => $cat->parent,
] );

if ( ! empty( $cats ) ) {
    echo \'<ul>\';
    foreach ( $cats as $cat ) {
        $url = esc_url( get_category_link( $cat ) );
        // change the \'before\' and/or \'after\' or whatever necessary
        echo "<li>before <a href=\'$url\'>$cat->name</a> after</li>";
    }
    echo \'</ul>\';
}

SO网友:HK89

使用get\\u term函数可以检索给定分类法或分类法列表中的术语。

请参阅此链接:https://developer.wordpress.org/reference/functions/get_terms/

     /*change on \'taxonomy\'=> \'your texonomy name\'*/
      $terms = get_terms(array(\'taxonomy\'=> \'category\',\'hide_empty\' => false, ));  ?>
        <div class="category_all">
            <div class="categor">
                <?php 
                echo "<ol>";
                 //get parent category term id $term->term_id            
                foreach ( $terms as $term ) {
                    if ($term->parent == 0 ) {
                     echo "<li>";                       
                     echo $term->name; // Parent Category Name 
                         echo "<ul>";
                         $subterms = get_terms(array(\'taxonomy\'=> \'category\',\'hide_empty\' => false,\'parent\'=> $term->term_id));

                        //get child category term id $value->term_id
                        foreach ($subterms as $key => $value) 
                        {
                           echo "<li>".$value->name."</li>"; // Child Category Name 
                        }
                        echo "</ul>";                       
                    echo "</li>";
                    }                   

                    }
                    echo "</ol>";
            ?>
        </div>
    </div>

<?php
如果要获取类别术语id,则可以在表达式中使用$term->term\\u id

父带子类别截图

enter image description here

相关推荐

如何按GET_TERMS显示所有类别

我正在使用下面的代码,但只显示父类别,而我有许多子类别。我想显示所有类别,包括家长和孩子<label for=\"<?php echo $this->get_field_id( \'link\' ); ?>\"><?php _e( \'دسته بندی\' ); ?></label> <select id=\"<?php echo $this->get_field_id(\'link\'