Mostrar ‘Custom Post Types’: loop necesario

Recientemente os proponíamos la creación de Tipos de Contenido Personalizado o Custom Post Types para la versión 3.0 de WordPres, que está a punto de ser lanzada.

Una vez hemos creado en nuestra Administración las nuevas páginas desde las que crear esos contenidos personalizados, tendremos que ir hasta nuestras plantillas (templates) y generar los loops adecuados para extraer de la base de datos contenidos de tal o cual tipo.

El mejor método para conseguirlo es a través de wp_query:

<ul>
<?php global $wp_query;
$wp_query = new WP_Query("post_type=albums&post_status=publish");
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

    <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>

<?php endwhile; ?>
</ul>

Aquí estaríamos creando una simple lista de aquellos contenidos creados bajo el Tipo de Contenido Personalizado “Albums”.

Podremos dentro de este loop, por lo tanto, extraer como de costumbre tantos elementos como queramos del contenido creado bajo esa rúbrica: título, extracto, contenido entero, imágenes adjuntas, campos personalizados, categoría, etc etc.

Esperamos vuestros comentarios.

Comentarios
  1. muy útil! no sabia que se podria hacer eso

    se me ocurren varias cosas que hacer con eso, ¿Otra utilidad de esto es aplicar una especie de layout especial para verlos? ¿ puedes distinguir dentro del loop el “post_type” del post (una especie de post_type() como the_permalink() )?

    es para hacer algo como te creas el tipo “aviso” y si es de ese tipo en el loop principal que salga con una caja negra y sin titulo (sin guarrear con la categoría donde lo metes), no se si me he explicado :P

    Escrito el19/05/2010
  2. Con este código puedes añadir todos los “custom post types” a la página de inicio:

    add_filter( 'pre_get_posts', 'my_get_posts' );
    function my_get_posts( $query ) {
    $post_types= get_post_types( array( '_builtin' => false ), 'objects' );
    $array = array('post');
    foreach($post_types as $type)
    array_push($array, $type->name);

    if ( is_home() )
    $query->set( 'post_type', $array );

    return $query;
    }

    Te busca todos los tipos de contenido que tengan el atributo “_builtin” como “false” y los añade al loop principal.

    @xhiena: puedes usar la función get_post_type($post->ID) dentro del loop y te devuelve un string con el tipo de post. Con esto puedes modificar la clase del post, por ejemplo…

    Escrito el19/05/2010
    • franco

      como le hago para mostrar los ‘CUSTOM POST TYPES’ de un author

      Escrito el26/04/2016
  3. Bueno, el primer código no aparece bien… lo he colgado en Pastebin para que lo puedan copiar si lo necesitan :)

    http://wordpress.pastebin.com/7cRUP8iA

    Además, un ejemplo de uso de la función get_post_type($post->ID):

    http://wordpress.pastebin.com/awufiLk4

    Escrito el20/05/2010
  4. Gracias marc!

    Escrito el01/06/2010
  5. Darío Ferrer

    Hola Ignacio,

    En realidad los Custom Post Types representan, a mi parecer, el avance más relevante de la versión 3.0 de WP, ya que permite al desarrollador expandir considerablemente sus posibilidades con el software.

    Explicando brevemente: tal como sabemos existen varios tipos de ‘posts’ tales como entradas y páginas. Precisamente esta nueva característica nos ofrece la posibilidad de crear nuevos tipos de posts además de éstas (que a efectos de orden vendrían siendo complementados con Custom Taxonomies). En tal sentido la arquitectura de WordPress se ubica a años luz respecto al resto de los CMS del planeta.

    Me gustaría verte publicando más artículos enfocados a este tema específico que necesita bastante difusión (por lo útil e innovador).

    Saludos.

    Escrito el07/06/2010
  6. Hola, quiero hacer una pregunta medianamente relacionada.

    Necesito mostrar el titulo y una miniatura de post aleatorios en mi sidebar¿Como se podira hacer? .
    La miniatura podria ser la que sale por defecto, la de 150 x 150.
    Pero me gustaria saber si hay algun plugin que permita hacer eso, post aleatorios con su miniatura .
    Gracias saludos.

    Escrito el27/07/2010
  7. @eliseoM: no necesitas ningún plugin para esto (siempre que se pueda evitar usar plugins, mejor usar código “picado”, ya que los plugins hacen que tarde más en cargar la página).

    Así por encima yo ve que necesitas un “loop” y hacer que la consulta (“query”, en inglés) tenga un orden aleatorio y coja solo un resultado. Con esto y alguna función prefabricada, puedes mostrar la miniatura del post…

    Busca en Google sobre cómo mostrar posts aleatorios en la barra lateral ;)

    Escrito el27/07/2010
  8. Gracias,
    estaba pensando algo de eso, supongo que con la funsion query_post, el argumento rand de aleatorio y sacar la miniatura vemos con algo de esto wp_get_attachment_image( $image->ID, ‘thumbnail’ ).
    query_posts(‘rand’).
    Gracias por larepuesta.
    Prometo volver en busca de mas
    saludos

    Escrito el27/07/2010
  9. Jairo

    En mi caso quiero incluir un tipo de contenido a archive.

    ¿Por qué código tengo que substituir este que dices?

    Lo que quiero es que me muestre como un listado de categoria pero con el nuevo tipo de contenido.

    Muchas gracias

    Escrito el12/08/2010
  10. Jorge

    Este código me ha resultado muy útil peero tengo una duda. En el caso de que quisiera paginar mis posts. He intentado meter ese código tanto en una plantilla como en archive.php y visualmente aparecen los botonoes pero al darle me lleva a otra página y se muestran los mismos 10 posts todo el rato. Da igual en qué página me sitúe.
    un saludo

    Escrito el27/03/2013
    • Julian

      Me ocurre lo mismo de Jorge.
      have_posts()) : $wp_query->the_post(); ?>
      <a href="” rel=”bookmark”>

      Como lo corrijo?

      Escrito el06/06/2013

DEJA TU COMENTARIO