如何更改排序类别视图,从子级开始,然后是父级,而不是按字母顺序

时间:2021-08-25 作者:carlozsan

我已经按城市和地区创建了类别。

在存档页面上,它显示良好。

问题是,视图是按字母顺序排序的。

例如:

城市(雅加达)

  • 1区(Tebet)
  • 2区(Cilandak)
  • 3区(甘比尔)
      • 现在显示:

        雅加达奇兰达克(Cilandak Jakarta)甘比尔(Gambir Jakarta)雅加达特贝特(Jakarta Tebet)我想:

        雅加达奇兰达克(Cilandak Jakarta)有谁能帮我改变一下吗?

        对不起,如果我的英语不好。非常感谢。

        我创建了这样一个片段:

        add_action(\'woocommerce_loop_add_to_cart_link\',\'displaying_product_attributes\',5);
        function displaying_product_attributes () {
            global $product;
            
            
            $harga_val = $product->get_attribute(\'pa_harga\');
            
            $kt_val = $product->get_attribute(\'pa_kt\');
            $km_val = $product->get_attribute(\'pa_km\');
            
            $luas_bangunan_val = $product->get_attribute(\'pa_luas-bangunan\');
            $luas_tanah_val = $product->get_attribute(\'pa_luas-tanah\');
            
            
                
           $terms = get_the_terms( $product->get_id(),\'product_cat\' );
          if( $terms ) {
            $names = array();
            foreach ( $terms as $term ) {
              $names[] = $term->name;
            
            
                
            }
           
          }
            
             
            
            echo "<p style=\'color:#1ebf41; text-align:left; text-indent: 3px; font-size:18px;line-height: 0.5; font-weight:bold\'>".$harga_val."</p>";
            
            
            echo "<p style=\'color:#333; text-align:left; text-indent: 3px; font-size:14px;line-height: 0.1;\'><i class=\'fas fa-bed\'></i> &nbsp;".$kt_val."&emsp;<i class=\'fas fa-shower\'></i> &nbsp;".$km_val."&emsp;<i class=\'fa fa-home\'></i>&nbsp; ".$luas_bangunan_val."m<sup>2</sup>&emsp;<i class=\'fas fa-expand-arrows-alt\'></i>&nbsp; ".$luas_tanah_val."m<sup>2</sup></p>";
            
            
            print \'<p style="color:#333; text-align:left; text-indent: 3px; font-size:14px;line-height: 1;"><i class="fas fa-map-marker-alt"></i> &nbsp; \'.join( \', \', $names ).\'</p>\'.PHP_EOL;;
        }
        
        让我给你一点暗示我想要什么。

        在设置存档页面/存储页面上,我只显示标题、图像和添加到购物车按钮。(我编辑了“添加到购物车”按钮)

        我在“添加到购物车”按钮之前插入了一些属性和类别。

        乍一看不错,但在信息类别上却成了颠倒的。(按字母顺序排序),它将变得不统一。

        我希望你或其他人仍然愿意帮助我,

        上面的代码段显示如下结果

        please see below

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

要按层次排序,请尝试向函数中添加排序函数。php(或插件)。

// This will sort and place everything in the $into array
function sort_terms_hierarchically(Array &$cats, Array &$into, $parentId = 0) {
    foreach ($cats as $i => $cat) {
        if ($cat->parent == $parentId) {
            $cat->posts = array();
            $into[$cat->term_id] = $cat;
            unset($cats[$i]);
        }
    }

    foreach ($into as $topCat) {
        $topCat->children = array();
        sort_terms_hierarchically($cats, $topCat->children, $topCat->term_id);
    }
}
现在,在显示端,您可以抓取所有类别并以第二个父名称显示它们。

$terms = get_the_terms( $product->get_id(), \'product_cat\' );
if ( $terms ) {
    $listItems = \'\';
    $sortedTerms = array(); // empty array to hold the sorted terms
    sort_terms_hierarchically( $terms, $sortedTerms ); // sort everything
    foreach( $sortedTerms as $parent) {
        if ( empty( $parent->children ) ) continue;

        foreach( $parent->children as $child ) {
            $listItems .= \'<li>\' . $child->name . \', \' . $parent->name . \'</li>\';
        }
    }
}

// Display the list
if ( !empty( $listItems ) ) {
    echo \'<ul>\' . $listItems . \'</ul>\';
}
希望这能更好地回答您的问题!

相关推荐

如何从unction.php中排除Get_Categories返回的类别?

我有一个插件,可以创建我的网站地图。它首先获取所有类别get_categories 然后获取每个页面的所有页面。但是,我有一个类别不能包含在插件代码中:$args[\'exclude\']=2; $cats = get_categories( $args ); 问题是,如果插件替换文件,我的修改将被删除,我尝试了以下方法:function exclude_cat($taxonomy, $args) { $args[\'exclude\']=2;