Hoy vengo con algo muy concreto que es de aquellas cosas que seguramente no necesites nunca saber cómo se hace, pero que si por casualidad has de implementar algo parecido te puede ahorrar un buen rato de búsqueda y pruebas.
Se trata de poder filtrar los posts de una taxonomía en concreto y mostrarlos agrupados según otra.
Para que se entienda mejor os explico el caso concreto:
Un CPT (custom post type) ‘ponencias’ que tiene dos taxonomías asociadas: area (marketing, gestión, logística….) y tema (productividad, herramientas, trucos, etc….)
Ambas son independientes y no jerárquicas y lo que queremos es una función que nos filtre todos los posts de ponencias que sean del área de marketing agrupados por temas.
PONENCIAS DE MARKETING
Herramientas:
Ponencia 1
Ponencia 4
Ponencia 7
…
Productividad:
Ponencia 2
Ponencia 4
Ponencia 5
etc….
Para ello crearemos una función que primero saque el listado de temas y utilice cada uno para filtrar los resultados de la wp_query, añadiendo como argumento «Y» que el area sea «marketing»
$listado_temas = get_terms( 'tema' ); foreach ( $listado_temas as $grupo_tema ) { $temas_query = new WP_Query( array( 'post_type' => 'ponencias', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'tema', 'field' => 'slug', 'terms' => array( $grupo_tema->slug ), 'operator' => 'IN' ), array( 'taxonomy' => 'area', 'field' => 'slug', 'terms' => 'marketing', ), ) ) ); if ( $temas_query->have_posts() ) { ?> <h2><?php echo $grupo_tema->name; ?></h2> <ul> <?php while ( $temas_query->have_posts() ) : $temas_query->the_post(); ?> <li><?php echo get_the_title(); ?></li> <?php endwhile; } ?> </ul> <?php $temas_query = null; wp_reset_postdata(); }
En este caso, el‘relation’ => ‘AND’, es lo que marca que se tengan que cumplir las dos condiciones, si lo cambiamos por un ‘OR’ podrá ser o una u otra condición.
El html de salida en este caso es una lista ordenada sencilla con sólo el título, pero allí podríamos dar los estilos y estructura necesaria para mostrar los posts en un grid, con su foto o lo que necesitemos.
¿Eres implementador o desarrollador WordPress?
En la Zona DPW encontrarás más recursos, tutoriales, plantillas, y una biblioteca de snippets para poder utilizar en tu día a día y ganar tiempo en tu trabajo:
ACCEDER AHORA
Comentarios
7 respuestas a «Filtrar y agrupar por diferentes taxonomías un Custom Post Type»
|
Hola Esther, espero te encuentres muy bien. Como bien dices, me tope por casualidad con tu post. Ando en «…algo muy concreto que es de aquellas cosas que seguramente no necesites nunca saber cómo se hace,» como bien mencionas. Quería consultarte lo siguiente, tengo un CPT y 3 tax. Necesito hacer tres select con las tax, cada uno dependiente del otro, cuando se seleccione una opción del primer select, se habiliten la opciones del 2 select correspondientes, y el 3 igual. Alguna idea, recomendación. Ando un poco perdido. He llegado hasta mostrar las tax en tres select, pero no estoy muy seguro de como debo hacer la dependencia de cada uno. Gracias por leerme y por tus comentarios. Y millones de gracias por compartir. Saludos.
|
Hola Adrian!
La consulta es muy interesante, pero complicada de contestar en un comentario! dependerá mucho de cómo lo tengas creado y la funcionalidad que necesites… a ver si puedo preparar un ejemplo de como lo haría yo, aunque como en muchas cosas, no existe una única forma de hacerlo.
Saludos!
|
Hola Esther. Muy interesante tu post. Estoy buscando relacionar CPT. Por ejemplo: tengo el CPT INGREDIENTES. Y otro CPT llamado RECETAS.
Cuando entre al formulario de RECETAS me gustaría tener un campo personalizado (un select por ejemplo) que aparezca lo que he introducido en el CPT INGREDIENTES.
Sabes si existe un plugin que pueda relacionar CPT’s? Me estoy volviendo loco buscando y no encuentro nada.
Muchas gracias y perdona la intromisión.
|
Hola Albert!
Para trabajar con campos personalizados y crear relaciones entre CPT, te recomiendo que uses Advanced Custom Fields, te permite hacerlo de una forma muy visual y sencilla.
Saludos!
|
Hola Esther. Muchas gracias por tu respuesta.
Precisamente, el que me recomientdas es el plugin con el que he creado los campos de los formularios de la web. Pero no veo la manera de crear un campo en el que aparezca el contenido de otro campo de un CPT y que lo muestre.
Volviendo al ejemplo anterior: me gustaría que un campo mostrase todos los ingredientes en un selector o en unos checks o que pudieras introducir el inicio de un ingrediente y te aparezcan los que empiezan con esas letras para seleccionarlos (igual que se hace para seleccionar categorias, tipo AJAX). Pero no manualmente, como me pide ahora Advanced Custom Fields sino automáticamente.
No veo la manera con este plugin de decirle a Advanced Custom Fields que un campo que acabo de crear me presente el contenido de un CPT. Me de la impresión como si tuviera que utilizar código.
Muchas gracias!
|
Hola Albert como estas, encontraste solución a tu problema, es que tengo el mismo inconveniente
|
Hola Alberto, Junior.
Han encontrado respuestas? Estoy en busqueda de lo mismo.