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