我有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个条款。
问题:
如何限制应用于两个的术语数量?
由于
答案 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, ' ') );
}