Как в свой пункт меню в админке, поместить пункт с созданием кастомных постов?

Ссылка скопирована
API
1 ответ

Приветствую!
Создал пункт меню в админке (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'; };

Дополнительно:

Напишите код текстом, оформив соответствующим тегом.

  • Михаил Р., код помещай текстом, а не картинками.
  • Михаил Р., Refguser,
    поправил
  • Зачем вы вообще добавляете add_menu_page(), при регистрации post type, он и так будет у вас в меню, если указать show_in_menu true
  • show_in_menu сюда адрес родительского пункта меню

    • спс, разобрался)

    Ответы:

    На странице меню открыть настройки экран и включить отображение кастномного типа.
    При условии, что при создании кастомного типа не была отключена эта возможность.

    UP.
    После публикации кода видно. что ты отключил вывод в меню.

    'show_in_menu'        => null, // показывать ли в меню админки

    'show_in_menu' => null, // показывать ли в меню админки

    Не пиши чего не знаешь..

    • в настройках нет пункта экран.

      Как в свой пункт меню в админке, поместить пункт с созданием кастомных постов?

    • MegaPuxapb, настройки экрана находтся справа вверху

      Как в свой пункт меню в админке, поместить пункт с созданием кастомных постов?

      И на каждой странице админки они свои.

    • Refguser, в созданном пункте, нет такой менюшки. Но всё равно спасибо, подтолкнули в нужное направление, разобрался)

      Как в свой пункт меню в админке, поместить пункт с созданием кастомных постов?

    • MegaPuxapb, просто удали. Удали всё, что не понимаешь для чего. (у тебя и public и возможно с другие не правильно указаны.)
      Будет по дефолту. А по дефолту всё правильно :)

      И изучай что для чего.

    • Refguser, зачем удали?! если у меня всё работает как надо)
      вы видимо вопрос недопоняли?)
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Редакция DevOps Ответ

    Чтобы пункт с кастомными записями появился внутри вашего собственного меню в админке, у 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>';
    }

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

    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'. Это штатный способ поместить кастомный тип записей внутрь своего пункта админки.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно