Как в свой пункт меню в админке, поместить пункт с созданием кастомных постов?
Приветствую!
Создал пункт меню в админке (add_menu_page), как в этот пункт меню перенести создание кастомных постов?
add_action( 'init', 'register_post_types' ); function register_post_types(){ register_post_type( 'project', [ 'label' => null, 'labels' => [ 'name' => 'Проект', // основное название для типа записи 'singular_name' => 'Наименование', // название для одной записи этого типа 'add_new' => 'Добавить Наименование', // для добавления новой записи 'add_new_item' => 'Добавление наименования', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование Наименование', // для редактирования типа записи 'new_item' => 'Новое наименование', // текст новой записи 'view_item' => 'Смотреть наименование', // для просмотра записи этого типа. 'search_items' => 'Искать наименование', // для поиска по этим типам записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине 'parent_item_colon' => '', // для родителей (у древовидных типов) 'menu_name' => 'Проекты', // название меню ], 'description' => '', 'public' => false, 'show_ui' => true, // зависит от public 'show_in_menu' => null, // показывать ли в меню админки 'show_in_rest' => null, // добавить в REST API. C WP 4.7 'rest_base' => null, // $post_type. C WP 4.7 'menu_position' => null, 'menu_icon' => null, 'hierarchical' => false, 'supports' => [ 'title'], 'taxonomies' => [], 'has_archive' => false, 'rewrite' => true, 'query_var' => true, ] ); add_action('admin_menu', function(){ add_menu_page( 'Проекты', 'Проекты', 'manage_options', 'site-options', 'add_my_setting', '', 2 ); }); function add_my_setting(){ echo 'hello'; }; |
add_action( 'init', 'register_post_types' ); function register_post_types(){ register_post_type( 'project', [ 'label' => null, 'labels' => [ 'name' => 'Проект', // основное название для типа записи 'singular_name' => 'Наименование', // название для одной записи этого типа 'add_new' => 'Добавить Наименование', // для добавления новой записи 'add_new_item' => 'Добавление наименования', // заголовка у вновь создаваемой записи в админ-панели. 'edit_item' => 'Редактирование Наименование', // для редактирования типа записи 'new_item' => 'Новое наименование', // текст новой записи 'view_item' => 'Смотреть наименование', // для просмотра записи этого типа. 'search_items' => 'Искать наименование', // для поиска по этим типам записи 'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено 'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине 'parent_item_colon' => '', // для родителей (у древовидных типов) 'menu_name' => 'Проекты', // название меню ], 'description' => '', 'public' => false, 'show_ui' => true, // зависит от public 'show_in_menu' => null, // показывать ли в меню админки 'show_in_rest' => null, // добавить в REST API. C WP 4.7 'rest_base' => null, // $post_type. C WP 4.7 'menu_position' => null, 'menu_icon' => null, 'hierarchical' => false, 'supports' => [ 'title'], 'taxonomies' => [], 'has_archive' => false, 'rewrite' => true, 'query_var' => true, ] ); add_action('admin_menu', function(){ add_menu_page( 'Проекты', 'Проекты', 'manage_options', 'site-options', 'add_my_setting', '', 2 ); }); function add_my_setting(){ echo 'hello'; };
Дополнительно:
Напишите код текстом, оформив соответствующим тегом.
поправил
show_in_menu сюда адрес родительского пункта меню
- спс, разобрался)
Ответы:
На странице меню открыть настройки экран и включить отображение кастномного типа.
При условии, что при создании кастомного типа не была отключена эта возможность.
UP.
После публикации кода видно. что ты отключил вывод в меню.
'show_in_menu' => null, // показывать ли в меню админки |
'show_in_menu' => null, // показывать ли в меню админки
Не пиши чего не знаешь..
- в настройках нет пункта экран.
- MegaPuxapb, настройки экрана находтся справа вверху
И на каждой странице админки они свои.
- Refguser, в созданном пункте, нет такой менюшки. Но всё равно спасибо, подтолкнули в нужное направление, разобрался)
- MegaPuxapb, просто удали. Удали всё, что не понимаешь для чего. (у тебя и public и возможно с другие не правильно указаны.)
Будет по дефолту. А по дефолту всё правильно :)И изучай что для чего.
- Refguser, зачем удали?! если у меня всё работает как надо)
вы видимо вопрос недопоняли?)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос




Чтобы пункт с кастомными записями появился внутри вашего собственного меню в админке, у
register_post_type()есть параметрshow_in_menu. В него нужно передать slug родительского меню, созданного черезadd_menu_page().Пример:
add_action('admin_menu', function () { add_menu_page( 'Проекты', 'Проекты', 'manage_options', 'my-projects-menu', 'my_projects_page', 'dashicons-portfolio', 25 ); }); function my_projects_page() { echo '<div class="wrap"><h1>Проекты</h1></div>'; }
А при регистрации типа записи укажите этот slug:
add_action('init', function () { register_post_type('project', [ 'labels' => [ 'name' => 'Проекты', 'singular_name' => 'Проект', 'add_new_item' => 'Добавить проект', 'edit_item' => 'Редактировать проект', ], 'public' => true, 'show_ui' => true, 'show_in_menu' => 'my-projects-menu', 'supports' => ['title', 'editor', 'thumbnail'], 'has_archive' => true, 'rewrite' => ['slug' => 'projects'], ]); });
После этого “Все проекты” и “Добавить проект” будут дочерними пунктами вашего меню.
Если меню нужно только как контейнер, а отдельная страница родительского меню не нужна, можно вместо callback сделать редирект или добавить первым подпунктом список записей. Но чаще проще оставить родительскую страницу с краткой информацией.
Важно: не регистрируйте CPT внутри
admin_menu. Тип записи регистрируется наinit, а меню — наadmin_menu. Если перепутать хуки, могут появиться странные проблемы с правами, rewrite rules и REST API.Итог: используйте
show_in_menu => 'slug-roditelskogo-menu'. Это штатный способ поместить кастомный тип записей внутрь своего пункта админки.