wp_term_query type terms taxonomies tax_query link from for custom current php wordpress woocommerce categories custom-taxonomy

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 usar get_the_terms() que le dará directamente una matriz de términos de objetos (ya que get_the_term_list() usa get_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.