Obtener el primer término del post

10 mar 2012, 03:13:27
Vistas: 32.8K
Votos: 11

¿Cómo puedo obtener solo el primer término de un tipo de post personalizado?
Puedo obtenerlos todos sin problema. Esto es lo que estoy usando para obtener todos ellos

<?php foreach ($terms as $term) {echo '<a href="'.get_term_link($term->slug, 'sitecat').'">'.$term->name.'</a>,';} ?> >> <a href="<?php the_permalink(); ?>"><?php the_title('', ''); ?></a></h2></span>

Agradecería una respuesta usando mi código, pero cualquier ayuda es bienvenida

0
Todas las respuestas a la pregunta 5
2
30

No estoy seguro de lo que quieres decir con la taxonomía 'primera'... pero,

$terms = get_the_terms( $post->ID, 'mytaxonomy' );

devuelve un array de objetos de términos de taxonomía, así que

$term = array_pop($terms);

te daría el primer término en el array. Y luego:

echo '<a href="'.get_term_link($term->slug, 'mytaxonomy').'">'.$term->name.'</a>,'

(Puede que quieras incluir algunas sentencias if, en caso de que se devuelva un array vacío o un error (ver is_wp_error)

10 mar 2012 04:05:35
Comentarios

ok.. el error estaba de mi lado - no en tu respuesta ;) muchas gracias compañero

Sagive Sagive
16 mar 2012 22:34:17

array_pop eliminará y devolverá el último elemento del array. Usa array_shift para obtener el primer elemento. Ten en cuenta que ambas funciones reducirán el array original.

fonpacific fonpacific
23 oct 2024 11:26:16
1

A partir de PHP 5.4, puedes desreferenciar directamente un array, por lo que para obtener el primer término, simplemente puedes hacer:

$first_term = get_the_terms( $post->ID, 'TAXONOMY_NAME' )[0];
var_dump( $first_term );

Si necesitas una propiedad específica (como el nombre del término) del primer término, puedes hacer lo siguiente:

$first_term_name = get_the_terms( $post->ID, 'TAXONOMY_NAME' )[0]->name;
var_dump( $first_term_name );

EDITADO

Nota importante: esto tiene sus desventajas porque obtendrás un objeto WP_Error si la taxonomía es inválida. Además, si el array devuelto está vacío, también obtendrás una advertencia de clave de array indefinida, así que úsalo con cuidado.

28 jul 2015 11:16:29
Comentarios

¿Cómo obtendría todos los ID's de términos para cada post para usar en el archivo de la página de inicio @pieter-goosen

Brad Dalton Brad Dalton
9 ene 2022 07:55:14
1

¿Qué tal si accedemos directamente a la clave del objeto?

$terms = get_the_terms( $post->ID, 'sitecat' );
$first_term = $terms[0];

De esta manera puedes acceder al objeto.

echo $first_term->name;
28 jul 2015 11:06:00
Comentarios

Es mejor verificar si este índice existe, pero esto funciona ;)

Sagive Sagive
9 jun 2021 17:54:33
2

Para resumir todas las respuestas anteriores, aquí está el helper que utilizo. Realiza todas las verificaciones necesarias y acepta los mismos argumentos que la función get_the_terms().

function getTheFirstTerm($post, $taxonomy) {
    $post = get_post( $post );
    if ( ! $post ) {
        return false;
    }

    $terms = get_the_terms( $post->ID, $taxonomy );

    if (!empty($terms)  && !is_wp_error( $terms )) {
        // Esta línea efectivamente retorna el primer término disponible si existe.
        return $terms[0];
    }

    return false;
}

Nota adicional. Esta función, por simplicidad en la mayoría de mis casos, retorna solo el objeto del término o false. Aún puedes retornar WP_Error si en tu flujo necesitas verificarlo, por ejemplo:

if (!empty($terms)) {
   if(!is_wp_error( $terms )) {
       // Esta línea efectivamente retorna el primer término disponible si existe.
       return $terms[0];
   } else {
       return $terms; // Esto retorna el objeto WP_Error
   }       
}

Además, puedes ordenar los términos antes de retornar el primero, por ejemplo, para obtener el primer término por term_id, slug, nombre, orden de menú, etc.

11 nov 2021 02:44:03
Comentarios

Gracias por tu respuesta j.w. ;)

Sagive Sagive
11 nov 2021 02:55:40

Puedes señalar en tu código qué parte da el primer término para que otros usuarios puedan referirse a ello de manera efectiva.

西門 正 Code Guy - JingCodeGuy 西門 正 Code Guy - JingCodeGuy
11 nov 2021 10:59:49
3

Funcionó para mí. Muestra solo la primera categoría como texto, sin enlace.

$terms = get_the_terms( $post->ID , 'your_custom_taxonomy' );
foreach( $terms as $term ) {
    print $term->name;
    break;
    unset($term);
}
4 mar 2014 14:23:08
Comentarios

¿Qué "te funcionó"? Nota al margen: El break; realmente detendrá tu declaración, el unset nunca se activará y solo se procesará el primer elemento.

kaiser kaiser
4 mar 2014 14:57:27

unset( $term ); debería estar después de tu bucle foreach, y no dentro de él :-)

Pieter Goosen Pieter Goosen
28 jul 2015 11:18:11

Esto no funcionará si los términos devueltos son WP_Error.

J. Wrong J. Wrong
11 nov 2021 02:40:45