php - type - tax_query
Limite el número de términos de taxonomía expuestos (3)
Supongo que su resultado final es una cadena separada por comas: Acción, Drama, Aventura, Biografía, Animación.
Para mostrar solo dos elementos, puede
$items = "item1, item2, item3, item4";
$filter = explode('','', $items);
for( $i=0; $i<2; $i++ ) {
echo $filter[$i];
}
Intente reemplazar el código que proporcionó anteriormente por el siguiente
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, '' '') );
}
Tengo 2 conjuntos de taxonomía product_cat
y tvshows_cat
. Hay 12 términos para cada conjunto.
Un producto puede tener, hasta 12 términos (pero nunca de los 2 conjuntos al mismo tiempo) .
Uso este código para mostrar la lista de términos en la página del producto:
$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, '' '');
}
El resultado es:
Acción, Drama, Aventura, Biografía, Animación
El problema es que, en algunos casos, no hay espacio suficiente para mostrar todos los términos.
Necesito limitar el número de términos a 2 términos.
Pregunta:
¿Cómo puedo limitar el número de términos aplicados a dos?
Gracias
También puede usar explode()
con array_slice()
para este problema.
por ejemplo :
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, '' ''));
}
En lugar de usar la función
get_the_term_list()
, debe usarget_the_terms()
que le dará directamente una matriz de términos de objetos (ya queget_the_term_list()
usaget_the_terms()
ella misma si observa el código fuente de la función) .
Luego, puede crear una función personalizada para obtener lo que desea ( no utilizaré la función implode () o cualquier otra función php, ya que solo queremos dos términos).
Nota: No necesita la función strip_tags()
aquí
Entonces tu código será:
// 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;
}
Este código va en el archivo function.php de su tema (o tema) hijo activo o cualquier archivo de complemento ...
Entonces abajo está tu código:
$cats = get_my_terms( $post->ID, ''product_cat'' );
$tvcats = get_my_terms( $post->ID, ''tvshows_cat'' );
// Displaying 2 categories terms max
echo $cats . $tvcats;
Este código va en su archivo de plantillas php
- actualización - (relacionado con el comentario del autor)
O sin función, tu código será:
// 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;
Este código va en tus archivos de plantillas php
Este código está probado y funciona.