Diferentes métodos de hacer ‘get_terms’ según ‘post type’ en WordPress

Diferentes métodos de hacer ‘get_terms’ según ‘post type’ en WordPress

En WordPress puedes tener tus propias Taxonomías, es decir, tus propias ‘categorías personalizadas’, con otro nombre, y asignadas a tus entradas, tus páginas o incluso tus ‘Custom Post Types’. El problema es que si ésta es compartida por varios post types, no hay una función con la que obtener solamente los términos que estén asignados a posts de uno de ellos. Vamos con un ejemplo.

Supongamos que tenemos la taxonomía Géneros, y dos custom post types llamados Películas y Libros, compartiendo ambos los géneros. En el momento que intentes obtener los géneros que tienen las películas del sistema, no podrás hacerlo porque te devolverá todos, incluyendo los géneros asignados a libros que no están asignados a ninguna película. Incluso en el listado de géneros del backend, en la columna de ‘cantidad de posts’ estará sumando todos ellos.

Circulan varias formas de solucionarlo por internet, desde funciones propias que ejecutan consultas SQL, a filtros para el hook ‘terms_clauses’. Pero yo acabo de implementar la solución sugerida en el ticket oficial sobre el ‘bug’, que sugiere buscar los IDs de los posts del post type que te interesa, y después utilizar la función wp_get_object_terms, que te permite pasar un array de post IDs, así como un post type. Ha quedado bien sencillo:

image

Lo que hago es un loop sobre un listado de posts procedentes de una query ya realizada, guardarme todos los IDs que cumplen una condición, y luego utilizar ese array resultante para obtener sus términos. Quizás no es la solución más eficiente pero es fácil de entender, y de implementar si, al igual que yo, no eres un experto en PHP.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.