我正在为基于管理区域的自定义管理菜单创建插件。
我的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发送到创建子菜单页面的回调函数。
最合适的回答,由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\']