限制显示的分类术语数量
Limit the number of taxonomy terms diplayed
我有 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, ' ');
}
结果是:
Action, Drama, Adventure, Biography, Animation
问题是,在某些情况下,space 不足以显示所有术语。
我需要将术语数限制为 2 个术语。
问题:
如何限制适用于两人的条款数量?
谢谢
我假设您的最终输出是逗号分隔的字符串 - 动作、戏剧、冒险、传记、动画。
要仅显示两个项目,您可以
$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, ' ') );
}
您也可以使用 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, ' '));
}
Instead using get_the_term_list()
function, you should use get_the_terms()
which will give you directly an array of terms objects (as get_the_term_list()
is using get_the_terms()
herself if you look to the source code of the function).
然后你可以构建一个自定义函数来得到你想要的(我会不使用 implode() 函数 或 任何其他 php 功能,因为我们只需要 2 个术语。)
注意:这里不需要strip_tags()
函数
因此您的代码将是:
// 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;
}
此代码位于您的活动子主题(或主题)或任何插件文件的 function.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 模板文件中
— update — (related to author comment)
或者没有函数,您的代码将是:
// Product categories
$cats = get_the_terms( $post->ID, 'product_cat' );
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 = '';
// TV shows categories
$tvcats = get_the_terms( $post->ID, 'tvshows_cat' );
foreach($tvcats as $tvcat) $tvcat_arr[] = $tvcat->name;
if ( count($tvcat_arr) > 1) $tvcats_str = $tvcat_arr[0] . ', ' . $tvcat_arr[1]; // return first 2 terms
elseif ( count($tvcat_arr) == 1) $tvcats_str = $tvcat_arr[0]; // return one term
else $tvcats_str = '';
// The Display of 2 categories
echo $cats_str . $tvcats_str;
此代码在您的 php 模板文件中
此代码已经过测试并且有效。
我有 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, ' ');
}
结果是:
Action, Drama, Adventure, Biography, Animation
问题是,在某些情况下,space 不足以显示所有术语。
我需要将术语数限制为 2 个术语。
问题:
如何限制适用于两人的条款数量?
谢谢
我假设您的最终输出是逗号分隔的字符串 - 动作、戏剧、冒险、传记、动画。
要仅显示两个项目,您可以
$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, ' ') );
}
您也可以使用 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, ' '));
}
Instead using
get_the_term_list()
function, you should useget_the_terms()
which will give you directly an array of terms objects (asget_the_term_list()
is usingget_the_terms()
herself if you look to the source code of the function).
然后你可以构建一个自定义函数来得到你想要的(我会不使用 implode() 函数 或 任何其他 php 功能,因为我们只需要 2 个术语。)
注意:这里不需要strip_tags()
函数
因此您的代码将是:
// 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;
}
此代码位于您的活动子主题(或主题)或任何插件文件的 function.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 模板文件中
— update — (related to author comment)
或者没有函数,您的代码将是:
// Product categories
$cats = get_the_terms( $post->ID, 'product_cat' );
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 = '';
// TV shows categories
$tvcats = get_the_terms( $post->ID, 'tvshows_cat' );
foreach($tvcats as $tvcat) $tvcat_arr[] = $tvcat->name;
if ( count($tvcat_arr) > 1) $tvcats_str = $tvcat_arr[0] . ', ' . $tvcat_arr[1]; // return first 2 terms
elseif ( count($tvcat_arr) == 1) $tvcats_str = $tvcat_arr[0]; // return one term
else $tvcats_str = '';
// The Display of 2 categories
echo $cats_str . $tvcats_str;
此代码在您的 php 模板文件中
此代码已经过测试并且有效。