插件管理列表页面作为子菜单

时间:2013-09-02 作者:Panagiotis

我正在为基于管理区域的自定义管理菜单创建插件。

我的wordpress模板由5页不同的模板和一些自定义变量组成,最终用户可以使用我分配给他的自定义角色进行编辑,例如grunt。我这样做的原因是,用户可以有与页面管理员交互的最低知识。例如,我有一个包含6个自定义字段的页面,这些字段定义了模板的显示方式,而在另一个页面中,这些字段变量会更改以改变显示效果。

因此,在我的管理菜单中,我会有:

Site Management
- Page 1 Admin -> This makes a carousel with 2 items max
- Page 2 Admin -> This is a plain text page
- Page 3 Admin
- Page 4 Admin -> This is a carousel with 4 items max
- Page 5 Admin
等等。

由于我的菜单与显示的页面+主页链接相同,我使用了wp_get_nav_menu_items() 函数获取这些菜单。但现在我进退两难,试图访问每个页面的帖子进行编辑。

以下是我在“管理”菜单上列出页面的方式:

$options = get_nav_menu_locations();
$menu_items = wp_get_nav_menu_items($options[\'main_nav\']);
$i = 0;
foreach ((array) $menu_items as $key => $v):
    $post = get_post($v->object_id);
    setup_postdata($post);
    add_submenu_page(\'theme_admin2\', \'Administration\', $v->title, \'edit_posts\', \'theme_admin_\'.$v->object_id, array(&$this, \'display_page_test\'));
endforeach;
此时,每个菜单项都是一个子菜单页。如何将$v->object\\u id变量传递给插件类的display\\u page\\u test函数,以便区分输出?

UPDATE
我指的是创建一个管理菜单,使用公共菜单项作为子项(管理)。用户单击子项后,将显示页面的编辑屏幕:标题、正文和图像。这是客户将看到的唯一视图+配置文件。我已经创建了该页面,但无法将每个菜单的对象id发送到创建子菜单页面的回调函数。

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

您不会发布如何添加顶级菜单页面,但我认为当您单击子菜单项时,您会有一个url,如:

http://www.example.com/wp-admin/admin.php?page=theme_admin_{$pageid}
因此页面的id位于$_GET[\'page\'] 前置有固定字符串的变量。

那么,为什么不使用以下内容:

function display_page_test() {
  $id = (int)str_replace(\'theme_admin_\', \'\', $_GET[\'page\']);
  $page = get_post($id);
  $action = isset($_GET[\'action\']) ? $_GET[\'action\'] : \'\';
  // just for test
  switch ( $action ) {
      case \'edit\' :
        echo \'Do you want to edit \' . $page->post_title. \'?\';
        return;
      case \'delete\' :
        echo \'Do you want to remove\' . $page->post_title . \'?\';
        return;
      default :
        echo \'Ok, now we only show \' . $page->post_title;
        echo \'<pre>\';
        print_r($page);
        echo \'</pre>\';
        return;
   }
}
如果您不喜欢str_replace stuff,只需在变量中使用clean post id:

add_submenu_page(\'theme_admin2\', \'Administration\', $v->title, \'edit_posts\', \'theme_admin_\' . $v->object_id.  \'&post_id=\' . $v->object_id, array(&$this, \'display_page_test\'));
然后依靠$_GET[\'post_id\']

结束

相关推荐

Admin menus and submenus

我为管理员创建了一个选项页面,并将其显示为顶级菜单->add_menu_page($themename, $themename, \'administrator\', basename(__FILE__), \'mytheme_admin\');我想在我创建的顶级菜单下添加一个子菜单,以显示完全相同的页面(显示为子菜单,但当用户单击顶级菜单时也会打开此页面)。此外,我不知道如何在这个顶级菜单下添加我创建的另一个主题页面。在这里询问之前,我已经阅读了wordpress文档,但无法完成。非常感谢。