Añadir Custom Post Types a Categorías y Etiquetas en WordPress
Concha Alviz | 10 octubre, 2016 | 1:22 pm
Hace algunos días, registré un nuevo Custom Post Type en uno de mis proyectos en WordPress. Cree mi propio plugin, en wp-content > plugins, y, luego, en la plantilla o tema, lo perfilé dentro de wp-content > themes, como dice el Codex de WordPress, con una plantilla del tipo single-{post-type}.php
Como sabéis, esto funciona de maravilla. Al CPT, además, cuando lo damos de alta, podemos habilitarle todo tipo de taxonomías propias, que pueden ser fácilmente mostradas en plantillas de tipo taxonomy-{taxonomy}.php, de tal manera que, si tenemos, por ejemplo, un blog de cine y, para llevar a cabo nuestras críticas, creamos un CPT llamado Películas, al que vinculamos una taxonomía propia llamada Género, podemos mostrar el archivo de cada una de ellas creando una plantilla propia llamada taxonomy-genero.php. ¿Fácil, verdad?
Sin embargo, ¿qué ocurre cuando utilizamos las Categorías y Etiquetas por defecto de WordPress, es decir, una taxonomía de tipo Categoría para clasificar nuestros contenidos?
Sigamos con nuestro ejemplo, pues. En nuestro blog de cine, muchos de nuestros artículos, posiblemente, se encaminen a la crítica de películas — de ahí nuestra genial idea de crear un CPT para ello —, sin embargo, también nos interesará incluir otro tipo de artículos, como nuevas películas que están por llegar o nuestra especial visión de la cinematografía de un director en concreto, que, debido a su carácter un tanto ecléptico, daremos de alta como Entradas básicas de WordPress. Es posible que queramos vincular nuestras críticas y el resto de artículos bajo categorías y etiquetas comunes, por lo que, en estos casos, es bastante conveniente trabajar con el sistema de Categorías por efecto de WordPress.
Imaginad que, en esta línea, creamos, dentro del sistema por defecto de Categorías de WordPress, una nueva, llamada Películas de 2016, que contendrá reseñas, críticas o próximos estrenos de cine, y por lo tanto CPT y Entradas por defecto. Nos llevaremos una gran sorpresa al acceder a la página archivo de dicha categoría, ya que todas las entradas vinculadas a esta Categoría serán listadas, a excepción de aquellas que sean Custom Post Types. ¿El motivo? WordPress, por defecto, no introduce en el loop de Entradas, Categorías o Etiquetas, a los Custom Post Types. Es por ello que, cuando damos de alta un nuevo artículo o elemento vinculado a un CPT no nos aparezca en nuestro RSS o como últimas entradas publicadas, en la propia pantalla de inicio de WordPress.
Aunque es entendible, puede resultar un tanto tedioso y confuso esta separación tan tajante entre CPT y Entradas. Sin embargo, con algo de customización, — como podemos leer en el maravilloso post Add Custom Post Types to Tags and Categories in WordPress, que me ha salvado más de una vez la vida — todo puede quedar resuelto con un simple código que debemos añadir a nuestro function.php.
function add_cpt_to_loop( $query ) { if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) { // Get all your post types $post_types = get_post_types(); $query->set( 'post_type', $post_types ); return $query; } } add_filter( 'pre_get_posts', 'add_cpt_to_loop' );
Con esta función, todos vuestros CPT se añadirán al loop y funcionaran con categorías y etiquetas genéricas. Sin embargo, si queréis que esto solo suceda con algunos y no con todos vuestros CPT solo debéis substituir:
$post_types = get_post_types();
por
$post_types = array( 'post', 'your_custom_type' );
¿Fácil, verdad?