Añadir Custom Post Types a Categorías y Etiquetas en WordPress

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íasEtiquetas, 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?


Concha Alviz

Me llamo Concha Alviz y llevo, en esto del Diseño y de la Comunicación, más de una década. Licenciada en Publicidad y Relaciones Públicas, empecé mi carrera profesional como diseñadora gráfica en el campo de la Publicidad y el Marketing para, más adelante, especializarme en diseño web y en desarrollo de front-ends.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

l
Tradúcelo »