Desde la versión 3.0 de WordPress tenemos la posibilidad de crear Custom Posts Types no entrare en detalles de que son pero básicamente se pueden explicar como entradas personalizadas, Estas “entradas”  no son otra cosa que entradas comunes de WordPress con configuraciones diferentes.

Hay ocasiones en que debemos mostrar los Custom Post Types junto con las entradas normales ( por default los Custom Post Types no son accesibles en el  loop normal de WordPress ) por ejemplo en el home, en los archivos etc.

Entonces para poder acceder a los Custom Post Types usando el loop normal de WordPress debemos agregar un filtro al query mediente el  hook pre_get_posts que queda de esta manera.

[php] function my_get_posts( $query )
{
global $wp_query;
if ( !is_preview() && !is_admin() && !is_singular() )
{
$args = array(
‘public’ => true ,
‘_builtin’ => false
);
$output = ‘names’;
$operator = ‘and’;
$post_types = get_post_types( $args , $output , $operator );
$post_types = array_merge( $post_types , array( ‘post’, ‘custom_post_name’, ‘custom_post_name_2′ ) );
if ($query->is_feed)
{
/* Si es el Feed no insertes los custom posts, si quiere mostrarlo quita este if */
} else {
$my_post_type = get_query_var( ‘post_type’ );
if ( empty( $my_post_type ) )
{
$query->set( ‘post_type’ , $post_types );
}
}
}
return $query;
}
add_filter( ‘pre_get_posts’, ‘my_get_posts’ );

[/php]

La linea mas importante de esta función es:

[php] $post_types = array_merge( $post_types , array( ‘post’, ‘custom_post_name’, ‘custom_post_name_2′ ) );
[/php]

Aquí es donde agregamos los nombres de los Custom Post Types que queremos agregar al loop y listo ahora el loop funciona con nuestros Custom Post Types.

Cabe mencionar que para identificar el Custom Post Type en el loop basta con verificarlo de la siguiente forma:

[php]

if ( $post->post_type == ‘custom_post_name’)
{
//Do something…
}

[/php]

Saludos.

Comments
  1. Cesarcarballo - March 15, 2012 Reply

    Muy bueno.. Comento que dentro

    array_merge( $post_types , array( ‘post’, ‘custom_post_name’, ‘custom_post_name_2′ ) );

    hay que quitar $post_types pues de esa manera trae todos los post_types
    ¿se entiende?
    debe quedar asi..

    array_merge( array( ‘post’, ‘custom_post_name’, ‘custom_post_name_2′ ) );

    Gracias

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Follow me through my day

Send requests or questions about my products, find out on what I'm working and stay tune with my updates or just say hello ;)

Error 403: Your IP is being rate limited by Twitter.

@Tmeister