我正在使用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 以某种方式似乎有一个选项是“分层”的,但不确定如何使用它,所以它只是抓住了帖子的条款,而不是所有内容
最合适的回答,由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;
?>