Muchas veces querreis añadir algo mas que entradas y paginas a vuestro WordPress. Gracias a los custom post types y a la api de wordpress podemos crearnos nuestros propios tipos y añadirlos. Por ejemplo si quisierais añadir clientes, proyectos ,.. que tuvieran sus propios campos,..
¿Que son realmente los custom post types y que nos proporciona WordPress?
Los Custom Post Types son tipos personalizados. En WordPress tenemos por defecto:
- Entradas
- Páginas
- Adjuntos
- Revisión
- Menú de navegación
Muchas veces vereis temas en wordpress y pensareis como añaden proyectos, citas de clientes, o si estais mirando el codigo de la herramienta vereis que es un wordpress por el etiquetado y tienen sus propios tipos.
Podeis hacer esto de varias maneras, con un plugin o directamente por codigo. Siempre sera mejor no utilizar plugins pues dependeis de ellos y ademas si necesitais hacer algo especifico lo mismo no lo contempla.
Para este ejemplo vamos a añadir un nuevo custom post type ( cursos ) por ejemplo para un centro de formacion.
Vereis que es bastante sencillo y podeis aplicarlo o crear vuestros tipos como proyectos, fichas de peliculas,..
Siempre que podais intentar consultar la api de wordpress http://codex.wordpress.org/Post_Types
Ejemplo
Este codigo lo vamos a guardar en functions.php. Este fichero esta dentro de nuestro tema. A mi personalmente me gusta mas tenerlo fuera e incluirlo. Sobre todo porque luego se vuelve un documento monstruoso de largo y de mantener.
Pasos que vamos a hacer:
- Crearemos el nuevo content type
- Añadiremos una zona de categorias
Nuevo content Type (curso)
add_action( 'init', 'init_cursos' );
// funcion para crear cursos.
function init_cursos() {
$labels = array(
'name' => _x( 'Cursos', 'post type general name' ),
'singular_name' => _x( 'Curso', 'post type singular name' ),
'add_new' => _x( 'Crear nuevo', 'curso' ),
'add_new_item' => __( 'Crear nuevo Curso' ),
'edit_item' => __( 'Editar Curso' ),
'new_item' => __( 'Nuevo Curso' ),
'view_item' => __( 'Ver Curso' ),
'search_items' => __( 'Buscar Curso' ),
'not_found' => __( 'No se han encontrado Cursos' ),
'not_found_in_trash' => __( 'No se han encontrado Cursos en la papelera' ),
'parent_item_colon' => ''
);
// Creamos un array para $args
$args = array( 'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'curso', $args ); /* Registramos */
}Si quereis ver mas de content custom types codex.wordpress.org/Post_Types
Ahora vamos a categorizarlos con un tipo
// VAMOS A CATEGORIZAR LOS CURSOS
add_action( 'init', 'crear_tipo_cursos', 0 );
function crear_tipo_cursos() {
// Taxonomias o categorias
$labels = array(
'name' => _x( 'Tipo', 'tipo' ),
'singular_name' => _x( 'Tipo', 'taxonomy singular name' ),
'search_items' => __( 'Buscar por Tipo' ),
'all_items' => __( 'Todas los tipos' ),
'parent_item' => __( 'Tipo padre' ),
'parent_item_colon' => __( 'Tipo padre:' ),
'edit_item' => __( 'Editar Tipo' ),
'update_item' => __( 'Actualizar Tipo' ),
'add_new_item' => __( 'Crear Tipo' ),
'new_item_name' => __( 'Nuevo Tipo' )
);
register_taxonomy( 'tipo', array( 'curso' ), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'tipo' )
));
}