Mostrar términos para tipos de posts personalizados
Pude mostrar todos los términos pertenecientes a una taxonomía personalizada usando el siguiente código:
$args = array('post_type' => 'my_post_type','number' => '999');
$terms = get_terms( 'my_taxo',
[
'hide_empty' => true,
'orderby' => 'wpse_last_word',
] , $args );
foreach ( $terms as $term ) {
echo '' . $term->name . '';
}
Este código proporciona los resultados que quiero en mi localhost (xampp). Básicamente, muestra todos los términos asignados a un post particular. Pero cuando subo el código a un servidor en producción, el código ya no funciona como se espera. En cambio, muestra todos los términos sin filtrarlos. Incluso actualicé la versión de PHP en mi servidor para que coincida con el servidor local; aún sin éxito.
¿Alguien puede señalar el problema en mi código?

Tu código está incorrecto. No sé cómo está funcionando en tu localhost. Porque-
- Estás llamando a
get_terms()
con 3 parámetros cuando en realidad acepta 2 parámetros. El último es extra. - Y en segundo lugar,
get_terms()
devuelve todos los términos de una taxonomía, no los términos asociados a un post.
Para obtener los términos asociados a un post puedes usar wp_get_post_terms
.
Uso de wp_get_post_terms
dentro del bucle de WordPress-
Para cada post obtendrás los términos del post llamando a wp_get_post_terms
de la siguiente manera-
//Hacer algo si un valor específico del array existe dentro de un post
$term_list = wp_get_post_terms($post->ID, 'tu_taxonomia', array("fields" => "all"));
// Luego puedes ejecutar un bucle foreach para mostrar los términos de la taxonomía
foreach($term_list as $term_single) {
echo $term_single->slug; //hacer algo aquí
}
Y fuera del bucle-
// Hacer algo si un valor específico del array existe dentro de un post
// Y de alguna manera necesitas obtener el ID del post para pasarlo abajo.
$term_list = wp_get_post_terms($post_id, 'tu_taxonomia', array("fields" => "all"));
// Luego puedes ejecutar un bucle foreach para mostrar los términos de la taxonomía
foreach($term_list as $term_single) {
echo $term_single->slug; //hacer algo aquí
}
Espero que ayude.

Gracias, revisaré el codex y te haré saber si funciona, gracias por señalarlo. - @the_dramatist

Hola, he probado todos los scripts que hay y ninguno muestra los nombres de los términos del post que pertenece a un CPT. ¿Podrías ser tan amable de publicar el código que haga la magia? Ten en cuenta que mi código está fuera del loop, actualmente estoy usando:
$args = array('post_type' => 'projects','number' => '1');
$terms = wp_get_post_terms($post_id, 'Client',array("fields" => "names"), $args);
foreach( $terms as $term ){
echo '<h5>' . $term->name . '</h5>'; }

¿Podrías aclarar lo que estás intentando lograr? Sería mejor que edites la pregunta y la expliques más claramente. @rosh8111

Vale, tengo un tipo de post personalizado llamado "projects", en el que he creado una taxonomía llamada "Clients", donde introduzco los clientes en el backend. Así que cada vez que se publica un proyecto, selecciono un cliente que quiero mostrar en el frontend.

¿Entonces necesitas mostrar los términos asociados a una única publicación, cierto? ¿Y dentro del ciclo de WordPress o fuera del ciclo de WordPress? Si es fuera del ciclo, ¿en qué plantilla? ¿single.php
o archive.php
?

Tengo mi propia plantilla personalizada, de hecho esta página se carga en una página single.php personalizada asociada a un tipo de publicación personalizado. Te actualizaré con los resultados, gracias por la ayuda.

He revisado el código que me diste, me temo que no está obteniendo ningún resultado, simplemente vacío. Incluso he probado con query post. Nada..

Primero reemplaza your_taxonomy
con el nombre de tu taxonomía clients
. Luego haz un print_r($term_list)
y comparte aquí el resultado con una captura de pantalla de tu página de administración de la taxonomía personalizada. @rosh8111

[link]http://pad10.net/assets/tax_error.jpg, encuentra adjunta la captura de pantalla de mi configuración y los resultados que estoy obteniendo.

Después de algunas investigaciones encontré que el siguiente script hace el trabajo, gracias @the_dramatist por orientarme en la dirección correcta. Había usado global $post, pero no de la manera correcta.
global $post; $loop = new WP_Query(array('post_type' => 'myCPT', 'posts_per_page' => -1)); while ($loop->have_posts()) : $loop->the_post(); $terms = wp_get_post_terms($post->ID, 'my_taxonomy'); foreach($terms as $term_single) { echo '' . $term_single->slug. ''; } endwhile;
Si alguien obtiene resultados vacíos después de esto, simplemente elimina las categorías y vuelve a crearlas y aplicarlas.
