1

我的问题是我想单独列出我的自定义分类法,而不是全部在一行上。

我有父分类法LocationVenue并想这样列出它们:

位置:示例位置

场地:示例场地

但我使用的代码将它们显示为:

示例位置,示例场地

我正在使用的代码是:

<?php  the_terms( $post->ID, 'uk_events' ,  ' '); ?>

uk_events是我正在使用的自定义帖子类型,location并且venue是该帖子类型中的父分类法。

任何人都可以帮助解决这个问题,我将不胜感激,因为我还没有找到任何关于显示这样的分类法的信息。

谢谢

4

1 回答 1

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');

然后进一步,此代码可用于所有帖子类型(例如,从模板中的调用到在 functions.php 中具有此代码的函数),方法是替换'uk_events'$post->post_type.

于 2013-04-28T13:32:23.497 回答