限制显示的分类术语的数量

时间:2016-09-04 06:46:45

标签: php wordpress woocommerce categories custom-taxonomy

我有2个分类集 product_cat tvshows_cat 。每套有12个术语。

产品最多可以包含12个(但不能同时使用2套)

我使用此代码在产品页面中显示术语列表:

$cats = get_the_term_list($post->ID, 'product_cat', '', '  ', ''); 
$tvcats = get_the_term_list($post->ID, 'tvshows_cat', '', '  ', ''); 

if (!empty($cats)){
    echo strip_tags($cats, '   ');
}elseif(!empty($tvcats)){
    echo strip_tags($tvcats, '    ');
}

结果是:

  

动作,戏剧,冒险,传记,动画

问题在于,在某些情况下,没有足够的空间来显示所有术语。

我需要将条款数量限制为2个条款。

问题:

如何限制应用于两个的术语数量?

由于

3 个答案:

答案 0 :(得分:5)

  

使用get_the_term_list()功能,您应该使用get_the_terms()直接为您提供一系列术语对象 (因为get_the_term_list()正在使用{如果您查看函数的源代码,请自己{1}}

然后你可以建立一个自定义函数来获得你想要的东西(我将不使用implode()函数任何其他函数< / strong> php函数因为我们只想要2个术语。)

注意:您在这里不需要get_the_terms()功能

所以你的代码将是:

strip_tags()

此代码位于您的活动子主题(或主题)或任何插件文件的function.php文件中...

然后下面是您的代码:

// This function goes first
function get_my_terms( $post_id, $taxonomy ){
    $cats = get_the_terms( $post_id, $taxonomy );

    foreach($cats as $cat) $cats_arr[] = $cat->name;

    if ( count($cats_arr) > 1) $cats_str = $cats_arr[0] . ', ' . $cats_arr[1]; // return first 2 terms
    elseif ( count($cats_arr) == 1) $cats_str = $cats_arr[0]; // return one term
    else $cats_str = '';

    return $cats_str;
}

此代码在您的php模板文件中

  

- 更新 - (与作者评论相关)

或者没有功能,您的代码将是:

$cats = get_my_terms( $post->ID, 'product_cat' ); 
$tvcats = get_my_terms( $post->ID, 'tvshows_cat' ); 

// Displaying 2 categories terms max
echo $cats . $tvcats;

此代码在您的php模板文件上

此代码经过测试且有效。

答案 1 :(得分:4)

您还可以将explode()array_slice()一起使用来解决此问题。

例如:

function display_limited_terms($items){
    $filter = explode(',', $items);
    $a = array_slice($filter, 0, 2);
    foreach ($a as $b) {
        echo $b;
    }
}


$cats = get_the_term_list($post->ID, 'product_cat', '', '  ', '');
$tvcats = get_the_term_list($post->ID, 'tvshows_cat', '', '  ', '');

if (!empty($cats)) {

    display_limited_terms(strip_tags($cats, '   '));
} elseif (!empty($tvcats)) {

    display_limited_terms(strip_tags($cats, '   '));
}

答案 2 :(得分:3)

我假设您的最终输出是逗号分隔的字符串 - 动作,戏剧,冒险,传记,动画。

只显示两个项目

$items = "item1, item2, item3, item4";

$filter = explode(',', $items);

for( $i=0; $i<2; $i++ ) {
    echo $filter[$i];
}

尝试使用以下

替换上面提供的代码
    function display_limited_terms( $items ) {
        $filter = explode(',', $items);

        for( $i=0; $i<2; $i++ ) {
            echo $filter[$i];
        }
    }


    $cats = get_the_term_list($post->ID, 'product_cat', '', '  ', '');
    $tvcats = get_the_term_list($post->ID, 'tvshows_cat', '', '  ', '');

    if (!empty($cats)){

        display_limited_terms( strip_tags($cats, '   ') );
    }

    elseif(!empty($tvcats)) {

        display_limited_terms( strip_tags($cats, '   ') );
    }