WordPress后台添加侧边栏菜单

日期: 标签:CMSWordPress教程企业建站 43 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
文章目录

     本文是WordPress企业建站系列教程的第三篇文章,需要说明的是,如果想你学习这个企业建站的系列教程,需要你有一点点的WordPress主题或PHP开发基础,没有基础的也可以依样画葫芦,出错了可以给我留言。

     在本系列教程的第一篇文章 WordPress后台删除不需要的侧边栏菜单 中,我已经详细介绍了如何删除WordPress后台不必要的菜单,现在我再给大家介绍一下如果往WordPress后台的侧边栏添加自己定义的菜单。

一、添加顶级菜单

     往WordPress后台添加侧边栏菜单有什么用呢?之前你可能用过一些插件或者一些主题,它们提供了属于自己的一个菜单,点击进入这个菜单可以设置插件或主题的选项,或者给使用提供一些使用说明,这大大扩展了WordPress的功能,也方便用户去使用这些插件或主题,何乐而不为呢?其实我们在做一些WordPress主题的时候,WordPress提供的菜单仅限于设置WordPress本身自带的功能,当WordPress的功能被扩展后,这些自带的菜单已经不能满足我们的要求了,所以添加自定义菜单也成了WordPress主题开发者的一项迫切需求。

     添加WordPress顶级管理菜单其实也是一件非常简单的事情,使用两个WordPress内置函数就可以解决问题,分别是add_menu_page()add_action(),下面我提供一个php示例代码,添加到主题目录下的functions.php中就可以了:

/**
 * 名称:WordPress后台添加顶级菜单
 * 作者:露兜
 * 博客:https://www.ludou.org/
 * 最后修改:2011年01月26日
 */

// my_add_pages() 为 'admin_menu' 钩子的回调函数
function my_add_pages() {
	// 第一个参数'Help page'为菜单名称,第二个参数'使用帮助'为菜单标题
	// 'manage_options' 参数为用户权限
	// 'my_toplevel_page' 参数用于调用my_toplevel_page()函数,来显示菜单内容
	add_menu_page('Help page', '使用帮助', 'manage_options', __FILE__, 'my_toplevel_page');
}

// my_toplevel_page() 用于显示菜单的内容,填写菜单页面的HTML代码即可
function my_toplevel_page() {
	echo '
	这里填菜单页面的HTML代码
	';

	// 如以下示例代码。 wrap 类是WordPress构建好的css类,可以在你的HTML代码中使用
	/*
	echo '
	<div class="wrap">
	<h2>使用帮助</h2>
	<p>这里是使用帮助,通过阅读本文你将了解本程序的使用!有事请<a href="#">与我联系</a></p>
	</div>
	';
	*/
}

// 通过add_action来自动调用my_add_pages函数
add_action('admin_menu', 'my_add_pages');

     上面的代码注释已经比较清晰的介绍了主要内容,下面我再补充一点,关于add_menu_page的第三个参数,上面代码中传递了 manage_options 这个值,这个参数值为用户权限,也就是说只当当前已登录的用户具有manage_options这项权限时,才会在后台侧边栏显示你添加的这个菜单。需要提醒的是,这个是权限参数在WordPress 3.0中已被重新定义,之前版本可以往这个参数传递用户等级(1-10),但是如果你使用的是3.0以后的版本,请传递用户权限值。

     关于各个用户角色所具有的权限,可以参看这个对应关系表:Capability vs. Role Table,横坐标是用户角色,纵坐标是用户权限,中间蓝色高亮部分为各个角色所拥有的权限,英文也比较好理解,不懂可以找在线翻译。最后上张图片,添加以上代码后,可以看到后台多了一个 使用帮助 的顶级菜单:

WordPress添加菜单

二、添加侧边栏子菜单

     所有的侧边栏子菜单,也就是在WordPress现有的菜单中,添加对应的子菜单,如往工具菜单中添加一个子菜单备份

WordPress后台添加子菜单

     以下是php示例代码,添加到主题目录下的functions.php中就可以了:

/**
 * 名称:WordPress后台添加侧边栏子菜单
 * 作者:露兜
 * 博客:https://www.ludou.org/
 * 最后修改:2011年01月26日
 */

function my_add_submenu() {
	add_submenu_page( 'tools.php', 'my_backup', '备份', 'manage_options', 'backup-page', 'my_magic_function');
}

// 用于显示菜单的内容,填写菜单页面的HTML代码即可
function my_magic_function() {
	echo '
	这里填菜单页面的HTML代码
	';

	// echo '
	// <div class="wrap">
	// <h2>备份</h2>
	// <p>这里可以备份你的博客数据库。</a></p>
	// </div>
	// ';
}

// 通过add_action来自动调用my_add_submenu函数
add_action('admin_menu', 'my_add_submenu');

     添加子菜单主要通过add_submenu_page()函数来实现,这个函数有很多参数,下面我来介绍这几个参数的作用。下面是该函数的原型:

add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );

$parent_slug
     这个参数为WordPress内置菜单的文件名称或缩略名,这里我们通常采用菜单文件名的方式。传递这个参数,就说明要往这个顶级菜单添加子菜单,以上示例代码中传递的值为 tools.php ,对应工具顶级菜单,下面提供这个参数的所有值及其对应的顶级菜单:

  • index.php:控制板
  • edit.php:文章
  • upload.php:媒体
  • link-manager.php:链接
  • edit.php?post_type=page:页面
  • edit-comments.php:评论
  • themes.php:主题
  • plugins.php:插件
  • users.php:用户
  • tools.php:工具
  • options-general.php:设置

$page_title
     这个参数是子菜单的标题,将会显示在浏览器的标题栏。

$menu_title
     这个是子菜单的名称,将会显示在侧边栏

$capability
     用户权限,这个定义了具有哪些权限的用户会看到这个子菜单,具体的参数值,可以参考上面第一部分的顶级菜单的说明。

$menu_slug
     子菜单的缩略名,请使用一个唯一的名称,英文形式。

$function
     所有调用的函数名称,通过调用这个函数来显示这个子菜单页面的内容

结语

     本次的教程到此就结束了,这部分内容我只是提供了添加顶级菜单和子菜单的基本方法,至于这个菜单中怎么添加选项,怎么添加内容,怎么写css把页面弄得很漂亮,这些就要靠你们自己去写html和css了。相比之前的几个教程,本次教程对你的PHP能力的要求也有所提高,如果你不会PHP,但是又想搞WordPress开发,建议你还是先去学学PHP吧。

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/add-admin-menu-in-wordpress.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

43 条留言

点此留言
  1. WordPress啦

    呵呵,默认的也可以,功能强大了更好,要试试博主的这篇文章的方法了

  2. 美思满

    后台弄那么多功能有什么作用呢,方便自己。前台才是最重要,方便访客的预览。

    • Ludou

      @美思满 等到你实际地去做一些WordPress项目的时候就知道了,这个系列教程主要受众不是WordPress博主,而是主题开发者。

      • 一一

        @Ludou 是哦,如果是CMS的,后台的功能的开发是必须的,博主很想问一下,为什么在手机上浏览的只是文章的简介和标题,没有一正文,很是郁闷

        • Ludou

          @一一 如果想要在手机上正常浏览wordpress博客,需要你创建一个手机版,具体你可以去搜索相关的wordpress 手机 插件

          • 一一

            @Ludou 我是看你的博客,不是我的,我看你的全是简介,没有全文,难道这样我也要安装插件吗?

          • Ludou

            @一一 我的博客不支持手机浏览,即使手机能看到详文,这么多代码,也看不出啥来。

  3. wp菜鸟

    露兜大大,万不得已才只好找到这里来问您:如何让在首页显示的最新文章只显示摘要。能用插件实现么?

    • Ludou

      @wp菜鸟 方法一:
      1、打开主题目录下的index.php,查找:the_content
      2、可找到类似:the_content(……..);/
      3、替换成:
      echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 200, "…");

      200为从正文中截取200字节作为摘要,可自行更改成任意偶数。

      方法二:
      方法一第3步改成替换成:the_excerpt();
      以后发布文章的时候,可自行填写摘要!

      方法三:
      用插件:wp-utf8-excerpt

      • wp菜鸟

        @Ludou 多谢露兜大大。
        我还是用了插件。。。
        虽然您没给说明但是看了它官方的说明再百度N次之后终于搞定了。
        不过方法请问用wp-utf8-excerpt怎么改变摘要的字数呢?

        • Ludou

          @wp菜鸟 没用过插件!

          • 艾菲路

            @Ludou echo mb_strimwidth(strip_tags(apply_filters('the_content', $post->post_content)), 0, 200, "…");
            如果用这种方法,有时候末尾会有一个问号,为什么会出现这种情况

          • Ludou

            @艾菲路 长度必须是个偶数,并用UTF-8编码保存源文件。
            再不行我也不知道是什么问题,我这测试的没有问题。

  4. 电脑知识与技术博客

    博主写东西写得好详细啊。不过我一直都害怕改代码。又一次弄出毛病吧我急坏了

  5. darkkgg

    我现在也在改inove主题,评论部分用着不习惯,想改成像你这样的,目前遇到的问题就是评论的嵌套问题,inove默认是用blockquote标签嵌套的,请问你这种评论是如何实现的呢?能简单说下思路吗?我现在回复某条留言,比如回复1#,就会在1#下面出现一条新评论,楼号是2#,其他评论依次向下一个楼号…

    • Ludou

      @darkkgg 用插件:Wordpress Thread Comment

      • darkkgg

        @Ludou 多谢 多谢 帮了我大忙了 折腾了这么久原来是个插件…

  6. 中文软件资讯站

    不懂这个 围观了

  7. T‘Micheal

    请问下,这个加上的菜单是现实在左侧最底部,我想显示在做头顶部应该怎么弄?

    • Ludou

      @T‘Micheal add_menu_page('Help page', '使用帮助', 'manage_options', __FILE__, 'my_toplevel_page');

      再加个参数:
      add_menu_page('Help page', '使用帮助', 'manage_options', __FILE__, 'my_toplevel_page', '', 0);

      最后那个参数0是菜单的位置,0 – 100 之间你填个数就可以变换菜单位置了。

  8. 游荡的尘

    您好,如果用这个版面设置主题的一些参数,在这里面的参数怎么传递?

    该怎么写呢?

    很多主题是用这个自定义的面板设置主题内容的

    • Ludou

      @游荡的尘 你可以使用搜索引擎搜索关键字:wordpress 主题 选项

  9. 米壳网

    你好,如何让 作者及以上的账号看到这个后台页面?manage_options这块怎么设置

  10. 米壳网

    房主,你好。我的主页最顶部的一些内容需要读取自定义的数据库,然后中间部分是程序预设定的,下面部分又是读取自定义数据。请问:

    while($row = mysql_fetch_array($result))
    {?>
    ………整个页面的HTML代码

    我是最先读取数据库的,把HTML全写在在while内,会影响打开速度的吗?

    • Ludou

      @米壳网 没有影响,关于PHP的代码速度,这些你可以不必考虑太多。建议在web前端进行优化。

  11. 米壳网

    我添加后台是引用外部一个PHP文件,请问这个PHP文件包含MYSQL的用户名与密码,安全吗?这个文件会被下载吗?

    • Ludou

      @米壳网 php文件无法被下载,除非你的ftp账号被别人偷走了,或者被人拿shell了。
      试问,wp-config.php中不是同样保存着这些信息吗?

  12. 米壳网

    说的也是。谢谢你。

  13. 米壳网

    我设置了publish_posts权限,但以一个作者账号登陆进去,依然看不到自定义菜单

  14. Hu

    我刚开始窥探wordpress内部!
    这篇文章对我有用,多谢了!

  15. 思念谁mv

    挺不错的不过我需要的是添加link链接菜单。

  16. 491580711

    你好。求助个关于相册功能的实现。用代码实现在single页或者page页里显示某个相册里的所有图片,点击其中的某个图片进入另外一个页面,该页面显示刚才点击的图片的大图显示并且下面有一横排的同一相册中其他图片的缩略图,可以点击下一张上一张。

  17. heasily

    add_action('admin_menu', 'my_add_pages');

    如何让一个等级为:编辑 的用户看到???

  18. iioo

    博主,请教个问题,我想按照这个思路,在后台建个菜单,右侧内容里显示些提交表单,js等,可是echo 'HTML代码';不能满足,有其他方法吗?

    谢谢!

    • Ludou

      @iioo 可参考:https://www.ludou.org/creating-custom-write-panels-in-wordpress.html

  19. wen

    请问刚刚创建的顶级菜单 要在刚刚创建好的菜单添加子菜单 $menu_slug
    子菜单的缩略名 不知道呢 和原始的功能怎么实现啊

  20. 阿凡

    如果把这菜单添加到前台指定位置应该怎么写代码啊?

  21. 肯恩

    请问,添加后台菜单后,点击菜单显示的内容,如:
    echo '
    这里填菜单页面的HTML代码
    ';

    这里如何引用一个模板文件?

  22. Mickee

    我是做java的,最近在搞WordPress,你的文章帮了我好多 谢谢~~~谢谢~~~

  23. wee

    围观

  24. lcc

    总是会覆盖前一个添加的菜单 好郁闷

发表留言