Crear una página de administración personalizada para custom post type + taxonomías + metas
Estoy desarrollando un plugin que se basa en tipos de contenido personalizados (custom post types), una nueva taxonomía y algunos campos personalizados.
Todos estos datos serán privados (no consultables ni buscables).
Me gustaría proporcionar una página de administración al usuario para agregar y editar estos datos de una manera más amigable.
Por ejemplo, el tipo de contenido personalizado solo tendrá un título y el campo de extracto, una taxonomía y los campos personalizados.
Sé cómo agregar meta boxes a un tipo de contenido personalizado, pero esto no es suficiente para mí.
Me gustaría crear una interfaz HTML completamente personalizada que se encargue de agregar/guardar/eliminar el tipo de contenido personalizado y manejar la taxonomía y los metadatos.
Para ser claro, ya sé cómo escribir un plugin normal y manejar las opciones del plugin.
No sé cómo, con este plugin, puedo:
- Agregar un nuevo elemento de menú en el menú de administración de WordPress
- En este elemento del menú, manejar, con una interfaz personalizada, el tipo de contenido personalizado
¿Existe algún tutorial por ahí que pueda ayudarme a lograr esto?

Así es como se puede hacer:
add_action('admin_menu' , 'add_to_cpt_menu');
function add_to_cpt_menu() {
add_submenu_page('edit.php?post_type=name_of_post_type', 'Administración de Custom Post Type', 'Configuraciones Personalizadas', 'edit_posts', basename(__FILE__), 'cpt_menu_function');
}

Necesitarás comenzar a leer sobre la API de configuración y opciones, y luego integrar tus CPT (Tipos de contenido personalizados) y Taxonomías en ella.
Aquí tienes un punto de partida:
Referencia de Clases/WP List Table « WordPress Codex
- Ejemplo de Plugin con Tabla Personalizada - Un ejemplo práctico de WP_List_Table en forma de plugin
Menús de Administración « WordPress Codex
- Plugin Editor de Menús de Administración - permite agregar, eliminar, ocultar y reordenar elementos de administración

http://codex.wordpress.org/Administration_Menus

Añadir menús y submenús como:
add_action('admin_menu', 'custom_plugin_menu');
function custom_plugin_menu() {
$page_title = 'Título del Menú Principal';
$menu_title = 'Título del Menú Principal';
$capability = 'manage_options';
$menu_slug = 'parent_menu_slug';
$function = 'whatever_for_main_page_function';
$icon_url = 'dashicons-admin-generic';
$position = 4;
add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position);
$parent_slug = 'parent_menu_slug';
$page_title = 'Título de la Página del Submenú';
$menu_title = 'Título de la Página del Submenú';
$capability = 'manage_options';
$menu_slug = 'edit-tags.php?taxonomy=your_taxonomy_name&post_type=custom_post_type_name';
$function = null;
$position = null;
add_submenu_page($parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function, $position);
}
finalmente:
add_filter('parent_file', 'menu_highlight');
function menu_highlight($parent_file) {
global $plugin_page, $submenu_file, $post_type, $taxonomy;
if ('custom_post_type_name' == $post_type) {
if ($taxonomy == 'your_taxonomy_name') {
$plugin_page = 'edit-tags.php?taxonomy= your_taxonomy_name&post_type= custom_post_type_name'; // el slug del submenú
$submenu_file = 'edit-tags.php?taxonomy= your_taxonomy_name&post_type= custom_post_type_name'; // el slug del submenú
}
}
return $parent_file;
}
Espero haber puesto todo correctamente. Anida cualquier otro if dentro de la verificación de taxonomía y añade lo mismo para otros tipos de contenido.
