1

我创建了一个自定义帖子类型并将其隐藏

使用register_post_type()

和一个菜单页面使用

add_menu_page()add_submenu_page()

自定义帖子类型的链接是page=edit.php?post_type=survey

对于菜单页面是admin.php?page=my_survey

我隐藏了,custom post type因为我不想显示它,我只想有一个菜单,但有一个指向子菜单页面的链接custom post type

admin.php?page=问题是当我在菜单中添加链接时,菜单中的所有链接都有前缀

menu_slug => 'edit.php?post_type=survey'

它补充说admin.php?page=edit.php?post_type=survey

无论如何,我可以从一个子菜单中删除该前缀吗?

我正在开发 OOP 这就是我添加子菜单的方式

  public function setSubPages()
  { 
    $this->subpages = [
      [
        'parent_slug'  => 'survey',
        'page_title'  => 'Survey Plugin',
        'menu_title'  => 'Survey',
        'capability'  => 'manage_options',
        'menu_slug'   => 'edit.php?post_type=survey',
        'callback'    =>   [$this->callbacks, 'adminDashboard'],
      ];
  }

和我的自定义帖子类型

  public function activate()
  {
    $labels =  [
      'name' => 'survey',
      'singular_name' => 'survey',

    ];

    $args = [
      'labels' => $labels,
      'public' => true,
      'has_archive' => false,
      'menu_icon' => 'dashicons-email-alt',
      'supports' => false,
      'exclude_from_search' => true,
      'publicly_queryable' => false,
      'show_in_menu'       => false
    ];

    register_post_type( 'survey', $args );

  }

如果我不够清楚,请告诉我谢谢

4

2 回答 2

2

这就是我解决问题的方法,因为那些有同样问题的人希望有所帮助

自定义帖子类型

      public function activate()
      {
        $labels =  [
          'name' => 'Email List',
          'singular_name' => 'Email List',

        ];

        $args = [
          'labels' => $labels,
          'public' => false,
          'has_archive' => false,
          'menu_icon' => 'dashicons-email-alt',
          'supports' => false,
          'exclude_from_search' => true,
          'publicly_queryable' => false,
          'show_in_menu'       => 'survey_plugin'  // <----- admin page menu_slug
        ];

        register_post_type( 'surveyemail', $args );

      }

管理员调查页面

public function setPages()
  { 
    $this->pages = [
      [
        'page_title'  => 'Survey Plugin',
        'menu_title'  => 'survey',
        'capability'  => 'manage_options',
        'menu_slug'   => 'survey_plugin', // same as show_in_menu custom post type
        'callback'    =>   [$this->callbacks, 'adminDashboard'],
        'icon_url'    => 'dashicons-format-aside',
        'position'    => 25
      ]
    ];

  }

  public function setSubPages()
  { 
    $this->subpages = [
      [
        'parent_slug'  => 'survey_plugin', // match menu_slug $this->page
        'page_title'  => 'Welcome',
        'menu_title'  => 'Welcome page',
        'capability'  => 'manage_options',
        'menu_slug'   => 'Welcome',
        'callback'    =>   [$this->callbacks, 'adminDashboard'],
      ],
      [
        'parent_slug'  => 'survey_plugin',// match menu_slug $this->page
        'page_title'  => 'feedback',
        'menu_title'  => 'feedback',
        'capability'  => 'manage_options',
        'menu_slug'   => 'feedback',
        'callback'    =>   [$this->callbacks, 'adminDashboard'],
      ]


    ];
  }

在此处输入图像描述

于 2018-06-28T14:25:34.230 回答
0

首先,如果您在之后取消设置参数中的每个效果(https://codex.wordpress.org/Function_Reference/register_post_type) ,那么public设置为没有意义。true

第二件事:您不能以这种方式使用menu slug,因为它的定义如下:

$menu_slug

(字符串)(必需)引用此菜单的 slug 名称。此菜单应该是唯一的,并且仅包含小写字母数字、破折号和下划线字符以与 sanitize_key() 兼容。

但是,有一种方法可以创建自定义子菜单 URL。请查看 SO WordPress 上的以下线程以获取更多信息:https://wordpress.stackexchange.com/questions/83768/add-menu-and-submenu-in-admin-with-a-url-instead-of-slug? answertab=votes#tab-top

不过要小心你在 WP-Admin 中所做的事情,如果你想在 WP-Admin 中拥有可编辑的帖子类型,通常是通过参数编辑它的最佳方式。

于 2018-06-28T12:25:31.927 回答