Cómo añadir Post Types a la página de blog de WordPress

¡Buenos días! En este vídeo-tutorial de WordPress vamos a ver como añadir otros Post Types al listado principal de entradas de WordPress. ¡Vamos allá!

Lo que conseguiremos hacer con este método es poder mostrar en el listado de entradas de blog, otros Post Types que nosotros mismos hayamos creado o que nos vienen dados por algunos plugins (como por ejemplo productos de WooCommerce).

Por ejemplo, si tenemos entradas normales de blog, pero también tenemos un post type de Podcast, y otro de Noticias, podremos mostrar los tres tipos de entradas juntos en la misma página de blog.

Para ello tendremos que modificar el loop de nuestro blog.

Modificamos el loop de blog

Para hacerlo simplemente tenemos que añadir un pequeño snippet de PHP a nuestra web, cosa que, como seguramente sabrás, se puede hacer de diferentes formas:

Aquí tienes más info sobre cómo añadir PHP en WordPress.

Una vez elegido el método preferido de insertar el PHP, debes insertar el siguiente código:

add_action( 'pre_get_posts', 'bps_post_types_blog' );

function bps_post_types_blog( $query ) {
	if ( is_home() && $query->is_main_query() ) {
		$query->set( 'post_type', array( 'post', 'CPT') );
		return $query;
	}
 }

Este código requiere una pequeña modificación para adaptarlo a tu caso. Donde pone array( 'post', 'CPT'), tendrás que cambiar la parte de CPT por el slug del post type que quieres mostrar junto a las entradas de blog.

¿Y dónde puedes sacar este slug? Si has registrado el CPT tu mismo, o con una herramienta como GenerateWP, tendrás que buscar la función register_post_type() y copiar esta parte de aquí:

Por cierto, aquí puedes aprender a crear Custom Post Types en WordPress sin plugin, en caso que te hayas perdido en esta parte.

Si es un post type que viene dado por un plugin, puedes buscar esta función entre el código del plugin o mirar en la documentación del plugin.

Una vez que tengamos el slug, simplemente lo pegamos en nuestra función, y nos quedaría algo así:

add_action( 'pre_get_posts', 'bps_post_types_blog' );

function bps_post_types_blog( $query ) {
	if ( is_home() && $query->is_main_query() ) {
		$query->set( 'post_type', array( 'post', 'podcast_cpt') );
		return $query;
	}
 }

También puedes indicar más post types, separados por comas, tal que así:

array( 'post', 'podcast_cpt', 'otro_cpt')

Cuanto tengas lista esta parte, simplemente guarda el código y ¡ya lo tienes! Ahora si vuelves a la página del blog, verás que ahí ya aparecen todos los tipos de posts que has indicado, juntos a las entradas del blog.