按层次顺序列出的Get_the_Category列表

时间:2012-06-22 作者:espnicholas

您好,现在我想知道如何才能在post循环中按层次顺序进行post。

<?php 
    foreach ((get_the_category()) as $childcat) 
    { 
        if (cat_is_ancestor_of(\'42\', $childcat)) 
        { 
            echo \'<li> <a href="\'.get_category_link($childcat->cat_ID).\'">\'; echo $childcat->cat_name . \'</a> </li>\'; 
        }
    }
?>
我希望它输出如下:

父母子女子女孙子孙女

3 个回复
最合适的回答,由SO网友:Adam 整理而成

使用wp_list_categories 相反

<?php 

    $args = array(
    \'hierarchical\'       => true,
    \'child_of\'            => 42,   //parent category
    \'hide_empty\'         => 1,    //hide empty categories (set to 0 to show)
    );

    wp_list_categories($args); 

?> 
的完整参数列表wp_list_categories 可以找到HERE

正如您所看到的,只需向存储在$args 稍后传递给wp_list_categories 作用

注意:添加child_of => ID 参数可以指定要为其检索类别术语的类别的父ID。请注意,如果父类别中没有帖子,它将不会显示,在这种情况下,您可以尝试设置hide_empty => 0 相反

更新吧,与其自己从头开始写这个,Scribu 谢天谢地,已经有了,所以请查看以下链接以了解更多详细信息;

http://scribu.net/wordpress/extending-the-category-walker.html

SO网友:tobidude

您需要对类别进行排序,以确保它们的顺序正确:

// get categories of post in sorted order
$categories = sortCategories(get_the_category());     

function sortCategories($categories) { // Sorting the category
    usort($categories, "cmpCategories");
    return $categories;
}

function cmpCategories($category_1,$category_2) { // Sort function
    foreach(get_categories(array("parent" => $category_1->cat_ID)) AS $sub) {
        if($category_2->cat_ID == $sub->cat_ID) return -1;
    }
    return 1;
}

SO网友:Fellipe Sanches

除了@tobidude的伟大解决方案外,还有一个完整的示例:

创建函数

function sortCategories($categories) { // Sorting the category
    usort($categories, "cmpCategories");
    return $categories;
}

function cmpCategories($category_1,$category_2) { // Sort function
    foreach(get_categories(array("parent" => $category_1->cat_ID)) AS $sub) {
        if($category_2->cat_ID == $sub->cat_ID) return -1;
    }
    return 1;
}
调用您的WP\\U查询。。。在循环调用函数sortCategories中的get\\u the\\u category()时:

$sub_cat = sortCategories(get_the_category()); 
在打印类别之前,我创建了一个条件以获取最深的类别:

if(isset($sub_cat[2])):
  echo $sub_cat[2]->name;
elseif(isset($sub_cat[1])):
  echo $sub_cat[1]->name;
else:
  echo $sub_cat[0]->name;
endif;

结束

相关推荐

Change URL to filter posts

我试图了解如何通过更改URL来过滤页面上的帖子。我试着添加这个作为测试-http://mydomain.com/find-work/?orderby=title&order=ASC 这并没有改变任何事情(我也尝试了DESC)。我基本上想有一些按钮与不同的URL的,这将改变显示的职位的顺序。