如何对GET_CATEGORIES结果排序

时间:2013-11-28 作者:mgt

我阅读了codex的文档,但我不能像parent、childrens那样对get\\u categories()结果排序。

我有以下三类:

-Events
    - Music
    - Culture
    - Workshop
    - Tourism
-Sport
    -Football
    -Rugby
    -Tennis
我希望输出为:

Events, Music
我试过:

echo $product->get_categories();
结果是音乐、事件(孩子、家长)的打印。

我还尝试将$args作为参数get\\u categories():

$args = array(
\'type\'                     => \'post\',
\'child_of\'                 => 0,
\'parent\'                   => \'\',
\'orderby\'                  => \'name\',
\'order\'                    => \'ASC\',
\'hide_empty\'               => 1,
\'hierarchical\'             => 1,
\'exclude\'                  => \'\',
\'include\'                  => \'\',
\'number\'                   => \'\',
\'taxonomy\'                 => \'category\',
\'pad_counts\'               => false
); 
我怎样才能按我想要的方式订购呢?

4 个回复
SO网友:Nicolai Grossherr

Firstly, $product->get_categories() 不会工作,因为它是一个woocommerce函数,基本上只是get_the_term_list, 没有排序参数<查看源代码以了解您正在处理的内容总是很好的

Secondly,get_the_term_list 使用get_the_terms, 但它也没有排序参数。后者从缓存中获取术语get_object_term_cache 或者直接wp_get_object_terms. 缓存很可能没有任何用处,因为其中的术语是以错误的排序保存的,因此存在问题。wp_get_object_terms 另一方面,它最终能够定义排序。

抄本:

Usage

wp_get_object_terms( $object_ids, $taxonomies, $args )

Default Arguments

$args = array(\'orderby\' => \'name\', \'order\' => \'ASC\', \'fields\' => \'all\');
第一个参数称为“orderby”,默认值为“name”。其他支持的值包括“count”、“slug”、“term\\u group”、“term\\u order”和“term\\u id”。

第二个参数称为“order”,默认值为“ASC”。唯一可接受的其他值是“DESC”。

所以这可以让你更接近你想要的,但是你自己看看。

Thirdly, 你可以用get_ancestors, 这给了你一个

层次结构中从最低到最高的祖先数组

它在woocommerce产品类别分类法上运行良好,因为它是分层的。但是,如果要为每个层次结构级别分配多个术语,则会有一点问题。我写了一个answer 关于这个一般性的话题,也许它会对你有进一步的帮助。

SO网友:Peter Salomonsen

I wrote this code that I run after get_categories. This will order the results by parent categories and names:

$all_categories = get_categories( $args );

$byId = array();
// Create an array with categories by id
foreach ($all_categories as $cat) {
    $byId[$cat->term_id] = $cat;
} 

// Add a new path field that we can sort by
foreach ($all_categories as $cat) { 
    $path = $cat->name;
    $parentCat = $cat;
    for($n=0;$n<10 && $parentCat->parent > 0;$n++) {
        // Limit to 10 levels (change if you need to)
        $parentCat = $byId[$parentCat->parent];
        $path = $parentCat->name."/".$path;
    }
    $cat->path = $path;
} 

// Finally sort by the new path field
function cmp($a, $b) {
    return strcmp($a->path,$b->path);
}

usort($all_categories, "cmp");

// $all_categories are now sorted by hierarchy and name
SO网友:Mayeenul Islam

我没有你那样的设置,所以让我们试试看。我在给代码,你最好试着给我反馈。它令人满意吗?

<?php
$args = array(
    \'type\'                     => \'post\',
    \'child_of\'                 => 0,
    \'parent\'                   => \'\',
    \'orderby\'                  => \'name\',
    \'order\'                    => \'ASC\',
    \'hide_empty\'               => false,
    \'hierarchical\'             => 1,
    \'exclude\'                  => \'\',
    \'include\'                  => \'\',
    \'number\'                   => \'\',
    \'taxonomy\'                 => \'category\',
    \'pad_counts\'               => false
);

$cats = get_categories( $args );
//var_dump($cat);
foreach( $cats as $cat ){
    echo $cat->name .\', \';
}
?>

SO网友:mgt

我试过:

<?php
$args = array(
    \'type\'                     => \'product\',
    \'child_of\'                 => 0,
    \'parent\'                   => \'\',
    \'orderby\'                  => \'term_group\',
    \'hide_empty\'               => false,
    \'hierarchical\'             => 1,
    \'exclude\'                  => \'\',
    \'include\'                  => \'\',
    \'number\'                   => \'\',
    \'taxonomy\'                 => \'product_cat\',
    \'pad_counts\'               => false
);

$cats = get_categories( $args );
//var_dump($cat);
foreach( $cats as $cat ){
    echo $cat->name.\', \';
}
?>
它将打印按层次结构分组的所有类别,在我的示例中:

Events, Sport, Music, Culture, Workshop, Tourism, Football, Rugby, Tennis.
我只想省略没有被选入该职位的类别。

结束

相关推荐

Placement of categories

我已经在我的域名上安装了zAlive主题,它在幻灯片的顶部有四个选项卡。我想把这些标签放在幻灯片栏中,链接到我的不同类别,但我不知道怎么做。我的希望是,当您从幻灯片栏中选择不同的选项卡时,每个类别中相应的帖子都会显示在下面。在此方面的任何帮助都将不胜感激。