Mostrar términos para tipos de posts personalizados

30 may 2017, 16:15:47
Vistas: 18.3K
Votos: 0

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?

0
Todas las respuestas a la pregunta 2
13

Tu código está incorrecto. No sé cómo está funcionando en tu localhost. Porque-

  1. Estás llamando a get_terms() con 3 parámetros cuando en realidad acepta 2 parámetros. El último es extra.
  2. 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.

30 may 2017 16:38:20
Comentarios

¿Puedes mostrarme el script a usar?

Roshan Deshapriya Roshan Deshapriya
30 may 2017 16:39:34

¿Has visitado el enlace? @rosh8111

CodeMascot CodeMascot
30 may 2017 16:40:15

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

Roshan Deshapriya Roshan Deshapriya
30 may 2017 20:35:27

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>'; }

Roshan Deshapriya Roshan Deshapriya
30 may 2017 23:51:42

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

CodeMascot CodeMascot
31 may 2017 00:48:38

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.

Roshan Deshapriya Roshan Deshapriya
31 may 2017 01:22:38

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

CodeMascot CodeMascot
31 may 2017 07:42:28

@rosh8111 revisa la respuesta actualizada.

CodeMascot CodeMascot
31 may 2017 07:51:06

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.

Roshan Deshapriya Roshan Deshapriya
31 may 2017 07:56:12

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

Roshan Deshapriya Roshan Deshapriya
31 may 2017 10:36:07

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

CodeMascot CodeMascot
31 may 2017 11:30:24

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

Roshan Deshapriya Roshan Deshapriya
31 may 2017 12:18:17

Obviamente esto no devolvería nada. Necesitas pasar el ID del post a $post_id. En tu caso, supongo que $post_id está vacío. Puedes obtener el ID del post desde global $post y luego usar $post->ID.

CodeMascot CodeMascot
31 may 2017 12:31:47
Mostrar los 8 comentarios restantes
0

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.

31 may 2017 13:46:19