Que son los custom post types y como crear uno


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