Una de las funcionalidades incluidas en WordPress 3.0 es la posibilidad de definir tipos de posts personalizados. Esto que parece que ha pasado desapercibido por la comunidad de desarrolladores es realmente interesante y ofrece una gran capacidad para extender cualquier WordPress fácilmente.
¿Que son los Custom Post Types?
Hasta la versión 2.9.x de WordPress disponíamos de unos pocos tipos de posts disponibles para identificar nuestros artículos. Estos tipos de posts, indicaban el estado del mismo (draft
, revision
,…) o el tipo de usado (attachment
, page
,…).
Ahora con la nueva versión de WordPress, la 3.0, la posibilidad de definir tipos de posts personalizados abre un abanico de posibilidades.
¿Como definir un nuevo Custom Post Type?
La API de WordPress está muy bien documentada en WordPress Codex y allí podemos encontrar como definir un Post Type fácilmente.
Todo pasa por la función register_post_type()
, que se encarga de registrar un nuevo tipo con una serie de características personalizadas.
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'super',
array(
'labels' => array(
'name' => __( 'Supers' ),
'singular_name' => __( 'Super' )
),
'public' => true,
)
);
}
Como vemos, debemos crear una función que se ejecutará en el action «init
» de WordPress y que registrará el nuevo tipo. Disponemos de muchos parámetros que podemos usar para personalizar el nuevo tipo, pero los veremos más adelante.
Introduciendo este código en, por ejemplo, el fichero functions.php
de tu theme o en un plugin. Obtendremos un resultado similar al que vemos en la imagen. Se trata de un nuevo menú con el nuevo tipo registrado.
En el nuevo menú descubrimos que podemos mostrar un listado de artículos del nuevo tipo o crear uno nuevo, siempre asociado al post-type
definido previamente.
Detalles de register_post_type()
Los parámetros que esta función reciba condicionarán el panel de administración de nuestro nuevo post_type.
Labels
name
: El plural del nuevo tipo (películas).singular_name
: Singular del nuevo tipo (película)add_new
: Etiqueta de «Añadir nuevo»add_new_item
: Cabecera del panel «Añadir nuevo»edit
: Etiqueta de «Editar»edit_item
: Cabecera del panel «Editar»new_item
: Muestra en el menú favoritosview
: Se utiliza como texto en un enlace para ver el post.view_item
:Se muestra junto con el enlace permanente en la pantalla de edición posteriorsearch_items
: Botón de texto para el cuadro de búsqueda en la pantalla de edición de mensajesnot_found
: Texto para cuando no encuentre itemsnot_found_in_trash
:Texto para cuando no encuentre items en la papelera.parent
: Se utiliza para definir el tipo padre. Solo útil en tipos heredados.
Ejemplo
'labels' => array(
'name' => __( 'Super Dupers' ),
'singular_name' => __( 'Super Duper' ),
'add_new' => __( 'Add New' ),
'add_new_item' => __( 'Add New Super Duper' ),
'edit' => __( 'Edit' ),
'edit_item' => __( 'Edit Super Duper' ),
'new_item' => __( 'New Super Duper' ),
'view' => __( 'View Super Duper' ),
'view_item' => __( 'View Super Duper' ),
'search_items' => __( 'Search Super Dupers' ),
'not_found' => __( 'No super dupers found' ),
'not_found_in_trash' => __( 'No super dupers found in Trash' ),
'parent' => __( 'Parent Super Duper' ),
),
description
La descripción, es usada para explicar de que trata el nuevo tipo.
Ejemplo
'description' => __( 'A super duper is a type of content that is the most wonderful content in the world. There are no alternatives that match how insanely creative and beautiful it is.' ),
public
Se trata de un parámetro que permite personalizar todo lo referente al comportamiento público del nuevo tipo. En caso de estar activo (true
) nos permitirá usar otros parámetros para personalizar nuestro post_type
.
show_ui
: Mostrar en las pantallas de Administraciónpublicly_queryable
: Permitir que las consultas por este tipo estén disponibles a los usuarios.exclude_from_search
: Eliminar de la lista de resultados de búsquedas.
'public' => true,
'show_ui' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
capability_type / capabilities
El tema de permisos es algo que también está reflejado en los Custom Post Types, permitiendo definir que capacidades tiene cada perfil de usuarios sobre el tipo.
Para ello usaremos el atributo «capabilities
«:
edit_post
: Alguien puede crear y editar un post específicoedit_posts
: Capacidad de guardar los mensajes que permite la edición de este tipo de postsedit_others_posts
: Capacidad que permite la edición de los posts de los demás.publish_posts
: Capacidad de la concesión de la publicación de este tipo de posts.read_post
: Capacidad que controla la lectura de un puesto específico de este tipo de posts.read_private_posts
: Capacidad para permitir la lectura de los mensajes privados.delete_post
: Capacidad que otorga el privilegio de la supresión de posts.
Ejemplo
/* Global control over capabilities. */
'capability_type' => 'super_duper',
/* Specific control over capabilities. */
'capabilities' => array(
'edit_post' => 'edit_super_duper',
'edit_posts' => 'edit_super_dupers',
'edit_others_posts' => 'edit_others_super_dupers',
'publish_posts' => 'publish_super_dupers',
'read_post' => 'read_super_duper',
'read_private_posts' => 'read_private_super_dupers',
'delete_post' => 'delete_super_duper',
),
supports
Permite definir que cajas van a estar visibles a la hora de crear/editar un nuevo post del tipo definido. Para ello pasaremos un listado con los nombres de las mismas.
title
: Caja de títuloeditor
: Editor donde va el contenido del postcomments
: Posibilidad de activar/desactivar los comentariostrackbacks
: Capacidad de activar/desactivar los trackbacksrevisions
: Permitir ver las revisionesauthor
: Caja para definir el autorexcerpt
: Caja de excerpt.thumbnail
: Caja para definir la miniatura del post.custom-fields
: Caja de Custom Fieldspage-attributes
: Atributos de páginas
Ejemplo
'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail' ),
rewrite
La URL también puede ser personalizada mediante un simple parámetro que especificará el enlace usado. Para ello debemos especificar estos parámetros:
slug
: El prefijo del postwith_front
: Si el prefijo ha de estar en el frontend.
Más información
- Custom Post Types << WordPress Codex
- Custom Post Types in WordPress
- Custom Post Types in WordPress 3.0
- Extending Custom Post Types in WordPress 3.0
- register_post_type() << WordPress Codex
Actualización
- Custom Post Types UI, plugin que nos genera un cómodo interface web donde personalizar nuestros tipos de posts. Via.
- Magic Fields, plugin que permite generar interfaces amigables para todas las opciones de WordPress, inlcuye la opción de Custom Post Types.Via judas.
26 comentarios, 5 referencias
+
#