Comprobar si un tipo de entrada tiene un término
Tengo un tipo de entrada personalizada llamada articles
. También he creado una taxonomía llamada subject
. Cada artículo tiene un tema, al igual que las entradas tienen categorías.
Ahora el problema. Cuando estoy en page-articles.php
(page-slug.php
), necesito comprobar qué tema tiene el artículo. ¿Cómo puedo hacer eso? He estado navegando por la web durante días sin encontrar ninguna solución.
Lo que estoy pensando es que de alguna manera tengo que comprobar si la taxonomía subject coincide con un criterio. Algo como:
if (is_term('news', 'subject'){
// hacer esto
}
¡Pero realmente no puedo entender cómo funciona! La función is_term
no hace eso, y no puedo encontrar ninguna otra función tampoco.

if( has_term( 'jazz', 'genre' ) ) {
// hacer algo
}

Probé el código a continuación y funciona -- ¿es esto lo que estás buscando?
<?php
// obtén tu tipo de publicación personalizada y muestra todas
query_posts('post_type=articles&posts_per_page=-1');
if ( have_posts() ) : while ( have_posts() ) : the_post();
// puedes mostrar tu título, enlace permanente, etc. en cualquier parte del bucle
// obtén todos los elementos en tu taxonomía personalizada
$terms = get_the_terms($post->ID, 'Subject');
// recorre cada término y realiza tu verificación
foreach ( $terms as $term ) {
if($term->name == 'Término que estás verificando') {
// haz lo que necesites aquí
}
}
endwhile; endif;
?>
Reemplaza 'Término que estás verificando' arriba con el nombre real del tema contra el que estás verificando, no el slug.
Edición: No soy un experto en rendimiento de bases de datos, así que no estoy seguro si esta es la forma óptima de recuperar la información que buscas -- estoy abierto a sugerencias de otros.

Yo mismo he tenido una lucha interesante con esto.
Estoy usando http://codex.wordpress.org/Function_Reference/get_the_terms http://codex.wordpress.org/Function_Reference/is_object_in_term
Necesitaba mostrar encabezados de categorías y otros metadatos dependiendo de la presencia de etiquetas de taxonomía.
Obtuve resultados impredecibles con is_object_in_term al verificar un ARRAY de etiquetas específicas, pero quizás lo que hice le sirva a alguien más. Terminé haciéndolo funcionar usando NULL, pero solo necesitaba verificar si existía una taxonomía y CUALQUIER término bajo ella aplicaba a la entrada que se estaba viendo para poder mostrar ciertos elementos.
Supongo que si solo estás buscando UN término, los ejemplos estándar en la página del codex deberían ayudar. Algo como...
if ( is_object_in_term( $post->ID, 'news', 'subject' ) ) :
echo 'SÍ';
else :
echo 'NO';
endif;
Mi código relevante a continuación:
$heading_nicename = array('Categoría','Barrios','Códigos Postales','Agencias Miembro','Transporte Público Más Cercano');
$tax_slug = array('category','neighborhoods','zip_codes','member_agencies','nearest_public_transportation');
$heading_key = 0;
$termindex = 0;`
foreach ( $tax_slug as $taxonomy ) {
//usado para mostrar términos como enlaces
$object_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields' => 'all'));
//usado en una verificación para ver si los términos de taxonomía aplican a la entrada
$o_terms = get_the_terms( $post->ID, $taxonomy );
if ( $o_terms && ! is_wp_error( $o_terms ) ) {
$check_these_terms = array();
}
foreach ( $o_terms as $term ) {
$check_these_terms[] = $term->slug;
//echo $term->slug.'<br/>';
}
$o_list = join( ", ", $check_these_terms );
//echo 'taxonomía: '.$taxonomy.'<br/>';
//echo 'términos: '.$o_list.'<br/>';
//resultados impredecibles
//if ( is_object_in_term( $post->ID, $taxonomy, array($o_list ) ){
//echo '<h4>'.$heading_nicename[$heading_key].'</h4>';
//}
//Termina siendo una verificación para CUALQUIER término bajo una taxonomía
if ( is_object_in_term( $post->ID, $taxonomy, null ) ){
echo '<h4>'.$heading_nicename[$heading_key].'</h4>';
}
$heading_key++;
echo '<p>';
$endindex = count($object_terms);
$termloop = 0;
foreach ($object_terms as $term) {
echo '<a href="' . esc_attr(get_term_link($term, $taxonomy)) . '" title="' . sprintf( __( "Ver todas las entradas en %s" ), $term->name ) . '" ' . '>' . $term->name.'</a>';
//limpiar comas
if ($termloop !== ($endindex - 1)){
echo ', ';
$termloop++;
}
$termindex++;
}
echo '</p>';
}`
