如何在wordpress的管理子菜单中链接自定义帖子类型?

时间:2018-06-28 10:36:36

标签: php wordpress menu wp-admin

  

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

     

使用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 );

  }

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

2 个答案:

答案 0 :(得分:1)

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

自定义帖子类型

      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'],
      ]


    ];
  }

enter image description here

答案 1 :(得分:0)

首先,如果随后在参数(https://codex.wordpress.org/Function_Reference/register_post_type)中取消将其public设置为true,则没有任何意义。

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

  

$ menu_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中使帖子类型可编辑,通常这是通过参数对其进行编辑的最佳方法。