2016-09-04 10 views
3

У меня есть 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, ' '); 
} 

Результат:

боевик, драма, приключения, биография, анимация

Проблема в том, что в некоторых случаях недостаточно sp чтобы показать все термины.

Мне нужно ограничить количество терминов до двух терминов.

Вопрос:

Как я могу ограничить количество терминов применительно к двум?

Благодаря

ответ

5

Вместо используя get_the_term_list() функцию, вы должны использовать get_the_terms(), который даст вам непосредственно массив терминов объектов(как get_the_term_list() использует get_the_terms() себя, если вы посмотрите на исходный код функции).

Тогда что вы можете построить пользовательскую функцию, чтобы получить то, что вы хотите не использовать взрываться() функция или любой другой функции PHP, как мы хотим, чтобы только два условия.)

Примечание: Вам не нужно 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


- обновление -(в связи с автором комментария)

Или без функции, ваш код будет:

// 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 файлов

Этот код протестирован и работает.

+0

можно ли использовать только код шаблона? Как использовать код только в шаблоне, а не в функции? –

+0

Да, но лучше использовать альтернативную версию без специальной функции. – LoicTheAztec

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, ' ')); 
    } 
+0

Как я могу это использовать? где сказать? –

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, ' ')); 
} 
+0

komak khasti bego. –

+0

Я не хочу использовать функцию.php. –

+0

вы не используете функцию.php для этой проблемы. просто добавьте верхний код в файл шаблона. –

Смежные вопросы