Crea un tipo de publicación personalizado llamado "Gig" y WordPress se encargará de la creación de la interfaz de usuario, entonces todo lo que te queda es agregar un Metabox con los campos que deseas (fecha, lugar, aproximadamente).
Aquí hay una guía paso a paso simple:
Primero: registre su tipo de publicación de concierto
//register your custom post type gig
add_action( 'init', 'register_cpt_gig' );
function register_cpt_gig() {
$labels = array(
'name' => _x( 'gigs', 'gig' ),
'singular_name' => _x( 'gig', 'gig' ),
'add_new' => _x( 'Add New', 'gig' ),
'add_new_item' => _x( 'Add New gig', 'gig' ),
'edit_item' => _x( 'Edit gig', 'gig' ),
'new_item' => _x( 'New gig', 'gig' ),
'view_item' => _x( 'View gig', 'gig' ),
'search_items' => _x( 'Search gigs', 'gig' ),
'not_found' => _x( 'No gigs found', 'gig' ),
'not_found_in_trash' => _x( 'No gigs found in Trash', 'gig' ),
'parent_item_colon' => _x( 'Parent gig:', 'gig' ),
'menu_name' => _x( 'Gigs', 'gig' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'description' => 'just a simple "where, when, with who" kind of thing',
'supports' => array( 'title', 'custom-fields' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_icon' => 'http://i.imgur.com/4nTMD.png',
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => true,
'capability_type'=> 'post'
);
register_post_type( 'gig', $args );
}
Esto te dará un nuevo tipo de publicación y una interfaz de usuario de administrador para crear tus conciertos:

Acontinuación,debecrearunMetabox(paraevitarelusodeloscampospersonalizadosregulares)
HayunmillóndetutorialesenlíneasobrecómocrearyagregartuMetabox,asíquenovoyaentrareneso,perotemostraréunamanerarápidayfácildehacerlo. Descarga esta clase y una vez que hayas puesto esto en tu tema, la creación de Metabox debería ser algo como esto:
if( is_admin() ) {
//include the main class file
require_once( "meta-box-class/my-meta-box-class.php" );
$prefix = '_gigs';
//configure your meta box
$config = array(
'id' => 'gigs-info',
'title' => 'Gig Info',
'pages' => array('gig'),
'context' => 'normal',
'priority' => 'high',
'fields' => array(),
'local_images' => false,
'use_with_theme' => false //change path if used with theme set to true, false for a plugin or anything else for a custom path(default false).
);
$my_meta = new AT_Meta_Box( $config );
//Add fields to your meta box
$my_meta->addText( $prefix . 'where', array( 'name'=> 'Where is the Gig ' ) );
$my_meta->addDate( $prefix . 'when', array( 'name'=> 'When is the Gig ' ) );
$my_meta->addTime( $prefix . 'start_time', array( 'name'=> 'When Does it Start ' ) );
$my_meta->addTime( $prefix . 'end_time', array( 'name'=> 'When Does it End ' ) );
$my_meta->addText( $prefix . 'with_who', array( 'name'=> 'With Who is the Gig ' ) );
$my_meta->addTextarea( $prefix . 'words', array( 'name'=> 'A few words on the gig ' ) );
$my_meta->Finish();
}
Terminarás con algo similar a esto:

Aquíhayotraimagenparamostrareleleganteselectordetiempo:
Para leer más sobre los tipos de campo que puede usar y agregar a su Metabox lea esto .
Eso es todo! Para finalizar, lo estoy publicando como un complemento para probar, pero asegúrate de descargar primero la clase Metabox para que funcione.
<?php
/*
Plugin Name: wp-gigs
Plugin URI: http://en.bainternet.info
Description: create list of gigs.
Version: 0.1
Author: Bainternet
Author URI: http://en.bainternet.info
*/
//register your custom post type gig
add_action( 'init', 'register_cpt_gig' );
function register_cpt_gig() {
$labels = array(
'name' => _x( 'gigs', 'gig' ),
'singular_name' => _x( 'gig', 'gig' ),
'add_new' => _x( 'Add New', 'gig' ),
'add_new_item' => _x( 'Add New gig', 'gig' ),
'edit_item' => _x( 'Edit gig', 'gig' ),
'new_item' => _x( 'New gig', 'gig' ),
'view_item' => _x( 'View gig', 'gig' ),
'search_items' => _x( 'Search gigs', 'gig' ),
'not_found' => _x( 'No gigs found', 'gig' ),
'not_found_in_trash' => _x( 'No gigs found in Trash', 'gig' ),
'parent_item_colon' => _x( 'Parent gig:', 'gig' ),
'menu_name' => _x( 'Gigs', 'gig' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'description' => 'just a simple "where, when, with who" kind of thing',
'supports' => array( 'title', 'custom-fields' ),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_icon' => 'http://i.imgur.com/4nTMD.png',
'show_in_nav_menus' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,
'has_archive' => true,
'query_var' => true,
'can_export' => true,
'rewrite' => true,
'capability_type' => 'post'
);
register_post_type( 'gig', $args );
}
if( is_admin() ) {
//include the main class file
require_once( "meta-box-class/my-meta-box-class.php" );
$prefix = '_gigs';
//configure your meta box
$config = array(
'id' => 'gigs-info',
'title' => 'Gig Info',
'pages' => array( 'gig' ),
'context' => 'normal',
'priority' => 'high',
'fields' => array(),
'local_images' => false,
'use_with_theme'=> false //change path if used with theme set to true, false for a plugin or anything else for a custom path(default false).
);
$my_meta = new AT_Meta_Box( $config );
//Add fields to your meta box
$my_meta->addText( $prefix . 'where', array( 'name'=> 'Where is the Gig ' ) );
$my_meta->addDate( $prefix . 'when', array( 'name'=> 'When is the Gig ' ) );
$my_meta->addTime( $prefix . 'start_time', array( 'name'=> 'When Does it Start ' ) );
$my_meta->addTime( $prefix . 'end_time', array( 'name'=> 'When Does it End ' ) );
$my_meta->addText( $prefix . 'with_who', array( 'name'=> 'With Who is the Gig ' ) );
$my_meta->addTextarea( $prefix . 'words', array( 'name'=> 'A few words on the gig ' ) );
$my_meta->Finish();
}