图片 2

在WordPress的后台中添加顶级菜单和子菜单的函数详解

添加设置页面-add_menu_page函数 add_menu_page(),这个函数是往后台添加顶级菜单先,也就是和“外观”、“插件”等一样的顶级菜单。

为什么要给wordpress注册默认文章之外的自定义的文章类型?比如本站,“教程”是按一般的博客文章形式来显示的,但是还有个“主题类”的文章,得用另一种显示形式,这样用普通的方法恐怕很难实现,所以需要另外注册一种文章类型,wp对每种文章类型可以用单独的模板来显示,这样就可以很方便实现我们要的效果了。

函数介绍如下:

不过自定义文章类型的实际用途不仅仅局限于此,比如我就看到过有专门注册一个自定义文章类型只是用来给主题首页一个图片切换banner添加图片等设置信息的。。

<?php  
add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );  
//page_title页面title标签信息  
//$menu_title 菜单标题  
//capability 权限  
//menu_slug 别名  
//function 执行函数  
//icon_url 菜单图标url地址  
//position 此菜单项在菜单中的位置,警告:如果两个菜单项的位置属性相同,其中一个可能要被覆盖  
?>

看了前一篇文章,我想创建一个自定义文章类型(custom post
type)使用的函数已经很明了了。

对于function参数,这个参数一般是函数名,如果在类中,要调用类的方法,使用array(类名,函数名)这样的形式调用。如果这个参数为空的话,menu_slug参数可以是一个文件路径。

  1. <?php   
  2. register_post_type( $post_type, $args );   
  3. //$post_type-必需,文章类型的名称   
  4. //args-可选,一个配置数组   
  5. ?>  

上面函数的position参数,默认的菜单项位置属性如下:

对于args数组,比较重要,参数比较多,详细说明如下:

2 Dashboard
 4 Separator
 5 Posts
 10 Media
 15 Links
 20 Pages
 25 Comments
 59 Separator
 60 Appearance
 65 Plugins
 70 Users
 75 Tools
 80 Settings
 99 Separator

label – (字符串,可选,不重要)默认和$post_type一样
labels – (数组,可选)
用来配置文章类型显示在后台的一些描述性文字。默认为空。

  • ‘name’ –
    文章类型的名称,这个可以用中文(一般为复数,对于中文而言就无复数之说了)。
  • ‘singular_name’-单篇文章对象的名称,(对于英文而言就是name的单数),默认为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-(布尔值),用于定义publicly_queriable, show_ui,
show_in_nav_menus and exclude_from_search的值

publicly_queryable- (布尔值)可以从前台获取的变量(从url中,比如url重写)

exclude_from_search – (布尔值),是否能够被搜索到

show_ui –
 (布尔值)是否生成一个默认的管理页面,也就是是否在后台有管理页面。默认跟public的是一样

show_in_menu –
 是否在后台菜单项中显示,如果为ture,那么show_ui的值也必须设置为true,将会有一个顶级菜单项。还可以为一个字符串,类似’tools.php’
或者’edit.php?post_type=page’

menu_position – 在后台菜单中的位置。

menu_icon – 菜单的icon图标(一个url)。

capability_type – 查看、编辑、删除的能力类型(capability),默认为post

capabilities – (数组,一般人用不到)

map_meta_cap – (布尔值),只有设置了capabilities才用的上

hierarchical –
(布尔值),文章是否有层级关系,也就是是否允许有父级文章。

supports – (数组),对文章类型的一些功能支持

  • ‘title’-标题
  • ‘editor’ (content) – 内容编辑器
  • ‘author’ – 作者
  • ‘thumbnail’ – 特色图像,主题还得支持特色图像才行
  • ‘excerpt’ – 摘要
  • ‘trackbacks’
  • ‘custom-fields’-自定义字段
  • ‘comments’ – 评论
  • ‘revisions’ – 修订版
  • ‘page-attributes’ – 页面属性,类似page,选择页面模板的那个

register_meta_box_cb –
当执行remove_meta_box() 和add_meta_box()时调用的函数

taxonomies – 添加已经注册了的分类法(比如默认的分类、标签)

permalink_epmask

has_archive – 文章是否有归档,就是一个所有文章归档页面。

rewrite –
(布尔值或者数组),是否有url重写,设置为false的话将会防止url重写,关于重写以后教程详细讲解。

query_var – url重写会用到

can_export – 是否输出

show_in_nav_menus – 是否出现在设置菜单页面的选项中

_builtin – wordpress开发人员建议你不要使用这个参数哦。

_edit_link –  wordpress开发人员建议你不要使用这个参数哦

好了,还是以实例来讲解,这样才能李菊福嘛。在默认的Twenty
Ten主题中新建一个myfuntions.php
,然后在functions.php文件中include用编辑器打开我们的myfunctions.php,
添加新代码:

说实话,上面参数这样列出来,我自己看了都不能很清楚的说明每个参数具体效果是什么,那么下面通过一个简单的实例来使用说明一下上面部分参数的实际效果,我们还是使用wordpress的默认主题,twentyten来测试,在twentyten主题文件夹下新建一个post-type.php文件,然后在functions.php文件的最后面添加代码:

<?php  
function test_function(){  
  add_menu_page( 'title标题', '菜单标题', 'edit_themes', 'ashu_slug','display_function','',6);  
}  
 
function display_function(){  
  echo '<h1>这是设置页面</h1>';  
}  
add_action('admin_menu', 'test_function');  
?>
  1. include_once(‘post-type.php’);  

可以看到,菜单位置是6,比较一下可发现,它将会在“文章”的后面,看:

在post-type.php中我们就可以添加注册文章类型的代码了,post-type.php中添加如下代码:

图片 1

  1. <?php   
  2. add_action(‘init’, ‘my_custom_init’);   
  3. function my_custom_init()    
  4. {   
  5.   $labels = array(
      
  6.     ‘name’ => ‘书本name’,   
  7.     ‘singular_name’ => ‘书本singularname’,   
  8.     ‘add_new’ => ‘Add_new’,   
  9.     ‘add_new_item’ => ‘add_new_item’,   
  10.     ‘edit_item’ => ‘edit_item’,   
  11.     ‘new_item’ => ‘new_item’,   
  12.     ‘view_item’ => ‘view_item’,   
  13.     ‘search_items’ => ‘search_items’,   
  14.     ‘not_found’ =>  ‘not_found’,   
  15.     ‘not_found_in_trash’ => ‘not_found_in_trash’,    
  16.     ‘parent_item_colon’ => ”,   
  17.     ‘menu_name’ => ‘menu_name’   
  18.   
  19.   );   
  20.   $args = array(
      
  21.     ‘labels’ => $labels,   
  22.     ‘public’ => true,   
  23.     ‘publicly_queryable’ => true,   
  24.     ‘show_ui’ => true,    
  25.     ‘show_in_menu’ => true,    
  26.     ‘query_var’ => true,   
  27.     ‘rewrite’ => true,   
  28.     ‘capability_type’ => ‘post’,   
  29.     ‘has_archive’ => true,    
  30.     ‘hierarchical’ => false,   
  31.     ‘menu_position’ => null,   
  32.     ‘supports’ => array(‘title’,’editor’,’author’,’thumbnail’,’excerpt’,’comments’)
      
  33.   );    
  34.   register_post_type(‘book’,$args);   
  35. }   
  36. ?>  

已经出现了一个顶级菜单页面了。。。

添加上面的代码后,进入后台,部分效果如图:

添加子菜单项-add_submenu_page 添加子菜单项的函数如下:

图片 2

<?php  
add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );  
//parent_slug-父级菜单项的别名  
//page_title--页面的title信息  
//menu_title-菜单标题  
//capability-权限  
//menu_slug-别名  
//function-执行的函数  
?>

 限于篇幅,这篇文章就到这里了。。敬请关注接下来的教程。。

其实有了前两篇教程,这个函数的用法无需多言了。

实例,还是用上两篇教程中的文件(在默认的Twenty
Ten主题中新建一个myfuntions.php
,然后在functions.php文件中include新文件)用编辑器打开我们的myfunctions.php,上一篇教程中我们已经添加了一个顶级菜单项,今天我们就在这个顶级菜单项的基础上添加一个子菜单项,保留昨天的代码,补充新的代码,之后myfunctions.php中的代码是这样:

<?php   
function test_function(){   
  add_menu_page( 'title标题', '菜单标题', 'edit_themes', 'ashu_slug','display_function','',6);   
}   
   
function display_function(){   
  echo '<h1>这是设置页面</h1>';   
}   
add_action('admin_menu', 'test_function');  
 
//以下是添加子菜单项代码  
add_action('admin_menu', 'add_my_custom_submenu_page');  
 
function add_my_custom_submenu_page() {  
  //顶级菜单的slug是ashu_slug  
  add_submenu_page( 'ashu_slug', '子菜单', '子菜单', 'edit_themes', 'ashu-submenu-page', 'my_submenu_page_display' );  
}  
 
function my_submenu_page_display() {  
  echo '<h3>子菜单项的输出代码</h3>';  
 
}  
 
?>

效果图是这样:

图片 3

OK,添加子菜单项完成。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注