如何根据帖子的层次结构列出2个分类术语

时间:2011-07-12 作者:Andrew

我正在使用get_the_terms 在一篇文章上显示2个与分类法“位置”关联的术语。术语是郊区和城市。位置分类是分级的,因此郊区是城市的子区域。

在后期编辑屏幕中,用户选择其城市,然后选择其郊区(根据所选城市列出郊区)。都可以从下拉菜单中选择。

我的问题是,当这些术语被输出到帖子上时,它会按字母顺序列出它们,在某些情况下,城市会排在第一位:

Alpha (City), Beta (Suburb) 
我需要他们反映出他们的等级制度,所以他们总是先按郊区列出,然后按城市列出。

Beta (Suburb), Alpha, (City)
这是我的密码。

<?php
$terms = get_the_terms ($post->id, \'location\');

if ( !is_wp_error($terms)) : ?>

<li id="location">

<?php unset($locations);
foreach ($terms as $term) {
    $locations[] = $term->name;
    }

$location = join(", ", $locations);
?>

<?php echo $location; ?>

</li>
<?php endif ?>
如果wp_list_categories 以某种方式似乎有一个选项是“分层”的,但不确定如何使用它,所以它只是抓住了帖子的条款,而不是所有内容

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

我设法用wp\\u get\\u object\\u术语来解决这个问题。这个\'orderby\' => \'term_id\' 非常有帮助。这可能不是最好的方法,但似乎效果很好。因为子术语(郊区)总是在父术语(城市)之后创建,所以它们总是具有更高的ID。

<?php 
$terms = wp_get_object_terms($post->ID, \'location\', array(\'orderby\' => \'term_id\', \'order\' => \'DESC\') );

if ( !empty( $terms ) ) :

    $location = array();
    foreach ( $terms as $term ) {
         $location[] = $term->name;
    }
    echo implode(\', \', $location);  

endif; 
?>

SO网友:tollmanz

我认为在您的情况下,最简单的方法是反转数组。

foreach ($terms as $term) {
    $locations[] = $term->name;
}
$locations = array_reverse($locations);
有更复杂的方法可以做到这一点,但我认为这应该适合你的情况。

结束

相关推荐

Taxonomy Dropdown Question

我需要替换show\\u option\\u all(显示所有分类法),使用:显示三个分类法(ID 14、15、16)并将其标记为“all”的命令基本上,当有人选择“all”时,我只想显示上面三种分类法的结果。注意:我不能从搜索结果中排除分类法,因为它会影响其他搜索表单。请帮忙!我当前的代码是:http://pastebin.com/NJi2LQhY谢谢保罗