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.



10 comentarios
19/05/2010
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
19/05/2010
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…20/05/2010
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
20/05/2010
Corregido, gracias. No sé por qué no va con la etiqueta <code> pero sí va con <pre> :-/
01/06/2010
Gracias marc!
07/06/2010
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.
27/07/2010
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.
27/07/2010
@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 ;)
27/07/2010
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
12/08/2010
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
Deja tu comentario