Obtener el primer término del post
¿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

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
)

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

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.

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.

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.

¿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.

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