Warning: reset() expects parameter 1 to be array, boolean given in /home/enriquec/webapps/wp_enriquechavez/wp-content/plugins/jm-twitter-cards/classes/admin/options.php on line 171

Mostrar Custom Post Types en el Loop de WordPress

by

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.

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' );

La linea mas importante de esta función es:

$post_types = array_merge( $post_types , array( 'post', 'custom_post_name', 'custom_post_name_2' ) );

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:


if ( $post->post_type == 'custom_post_name')
{
    //Do something...
}

Saludos.

Leave a Reply

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


Share This