我的问题是,我想单独列出我的自定义分类,而不是全部列在一行。
我有父母分类 Location
和 Venue
,并希望将其列为:
位置:示例位置
地点:示例场地
但我使用的代码将它们显示为:
示例位置,示例地点
我正在使用的代码是:
<?php the_terms( $post->ID, 'uk_events' , ' '); ?>
uk_events
是我正在使用的自定义帖子类型, location
和 venue
是该帖子类型中的父分类法。
任何人都可以帮忙解决这个问题,我会非常感激,因为我没有找到任何有关显示此类分类法的信息。
谢谢
答案 0 :(得分:0)
首先,我不确定您是否打算将自定义帖子类型传递给the_terms()
。
无论如何,我认为get_the_terms()
会给你灵活性。
例如:
<?php
$taxList = array("location", "venue");
foreach ($taxList as $tax) {
$terms = get_the_terms( $post->ID, $tax );
if ( $terms && ! is_wp_error( $terms ) ) {
echo "<br/>{$tax}: ";
$separator = "";
foreach ( $terms as $term ) {
echo "{$separator}{$term->name}";
$separator ", ";
}
}
}
?>
注意这是在iPad上键入的,因此可能包含语法或逻辑错误,因为我无法测试......但是想想这个想法应该足够有用了!
更新: OP建议上面的代码在每一行显示所有分类条款,这表明get_the_terms()
的结果未被分类法过滤在第二个参数指定。
我想知道这是否是因为分类法名称区分大小写,因此我在$taxList
数组中指定它们的方式可能不正确,但根据docco,如果是这种情况那么get_the_terms()
应该返回false
,在这种情况下不会输出任何内容。
所以 - 似乎我们可以过滤结果,如下所示:
<?php
$taxList = array("location", "venue");
foreach ($taxList as $tax) {
$terms = get_the_terms( $post->ID, $tax );
if ( $terms && ! is_wp_error( $terms ) ) {
echo "<br/>{$tax}: ";
$separator = "";
foreach ( $terms as $term ) {
if (strtolower($term->taxonomy) == strtolower($tax)) {// <-- New (redundant!?) filter.
echo "{$separator}{$term->name}";
$separator ", ";
}
}
}
}
?>
更新:进一步的更改可能是通过更新第一行来自动获取当前帖子中使用的分类法以避免拼写错误等:
$taxList = get_object_taxonomies('uk_events');
然后,通过将'uk_events'
替换为$post->post_type
,此代码可以用于所有帖子类型(例如,从模板中的调用到函数在.cp下使用此代码的函数)。