Создание пользовательской страницы администратора для произвольного типа записи + таксономии + метаданные
Я пишу плагин, который основан на произвольных типах записей, новой таксономии и нескольких пользовательских полях.
Все эти данные будут приватными (не доступны для запросов или поиска).
Я хотел бы предоставить пользователю страницу администратора для добавления и редактирования этих данных более удобным способом.
Например, произвольный тип записи будет иметь только заголовок и поле отрывка, одну таксономию и пользовательские поля.
Я знаю, как добавлять мета-боксы к произвольному типу записи, но этого мне недостаточно.
Я хотел бы создать полностью пользовательский HTML-интерфейс, который будет отвечать за добавление/сохранение/удаление произвольного типа записи и управлять таксономией и метаданными.
Для ясности, я уже знаю, как написать обычный плагин и управлять его настройками.
Я не знаю, как с помощью этого плагина:
- Добавить новый пункт меню в административное меню WordPress
- В этом пункте меню управлять через пользовательский интерфейс произвольным типом записи
Есть ли какие-то руководства, которые могли бы помочь мне достичь этого?

Вот как это можно сделать:
add_action('admin_menu' , 'add_to_cpt_menu');
function add_to_cpt_menu() {
add_submenu_page('edit.php?post_type=name_of_post_type', 'Настройки типа записи', 'Пользовательские настройки', 'edit_posts', basename(__FILE__), 'cpt_menu_function');
}

Вам нужно начать изучение API настроек и опций, а затем интегрировать в него свои пользовательские типы записей (CPT) и таксономии.
Вот несколько полезных материалов для старта:
Справочник классов/WP List Table « WordPress Codex
- Пример плагина с пользовательской таблицей - практический пример использования WP_List_Table в виде плагина
Административные меню « WordPress Codex
- Плагин редактора административного меню - позволяет добавлять, удалять, скрывать и изменять порядок элементов админ-панели

http://codex.wordpress.org/Administration_Menus

Добавьте меню и подменю следующим образом:
add_action('admin_menu', 'custom_plugin_menu');
function custom_plugin_menu() {
$page_title = 'Заголовок родительского меню';
$menu_title = 'Заголовок родительского меню';
$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 = 'Заголовок страницы подменю';
$menu_title = 'Заголовок страницы подменю';
$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);
}
И наконец:
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'; // slug подменю
$submenu_file = 'edit-tags.php?taxonomy= your_taxonomy_name&post_type= custom_post_type_name'; // slug подменю
}
}
return $parent_file;
}
Надеюсь, я всё правильно указал. Вложите дополнительные условия if внутрь проверки таксономии и добавьте аналогичные для других типов записей.
