【WP】如何添加新版 WordPress 菜单系统代码

WordPress.org 昨天释放了 3.0 的正式版的更新,在新版 WordPress 中引入了一个新的系统 “MENU” 菜单系统 WP 的新菜单系统和 Drupal 及其他 CMS 的菜单系统功能基本相同但使用上更为方便也使 WordPress 在主题开发者和用户使用者直接建立了又一座友好的桥梁,下面提供一些代码给主题(theme)开发者尽快将你的主题升级开启(menu)菜单系统的支持……

函数语法:

Menus SubPanel:http://codex.wordpress.org/Appearance_Menus_SubPanel

wp_nav_menu:http://codex.wordpress.org/Function_Reference/wp_nav_menu

register_nav_menus:http://codex.wordpress.org/Function_Reference/register_nav_menus

组件模式:

考虑到目前绝大多数主题模板均不支持新版的菜单系统所以 WordPress 3.0 添加了一个专门为菜单系统使用的 Widget 小组件叫 CustomMenu 定制菜单,对于不支持新菜单系统的主题使用者仍然可以在后台 外观 – 菜单 页面创建一个新的菜单,然后使用 CustomMenu Widget 加载到页面的小组件区域显示,正式版加入的这个小组件使得目前所有的主题无需任何修改即可平滑的支持新版菜单系统,之前在 RC 版则需要为主题添加 add_theme_support(‘nav-menus’) 语句才能开启菜单系统,但使用组件的缺点是显而易见的,使用者只能将菜单放置到小工具的位置以固定的结构显示,这个时候其实和之前的链接 Links Widget 小组件并没有什麽区别甚至可定制性更差,所以我们需要对主题模板做一些修改使其支持最新版的 WordPress 菜单系统。

菜单简介:

之前 WordPress 的链接功能虽然可以实现部分菜单的功能,因为我也发现很多主题开发者使用链接功能来使用户可以方便的定制自己的导航和菜单,在新版 WordPress 中则提供了更为自由和先进的菜单系统,就像我之前所说的他为主题开发者和模板使用者直接架起了又一座友好的桥梁,使开发者不用为了一个菜单或导航的变动而修改源代码,用户可以根据自己的情况随时 添加 删除 排序 层级 排列菜单系统,更可以直接在后台页面设置一些菜单属性如 打开方式 菜单描述 链接关系 等等,而这一切只需要添加很少的代码即可实现……

基本运用:

例如,我们在 WP 后台的 外观 – 菜单 页面添加了一个新的菜单其名称为 “菜单示例” 然后在主题模板中就可以使用 wp_nav_menu(‘menu’ => ‘菜单示例’) 来直接调用这个菜单不过具体操作中尽量不要使用中文,因为默认该函数会以菜单名称做为 class 或者 id 的一部分,虽然可以使用参数 container_class 来覆写最外层的 class 但下一级的 ul 仍会引用菜单名称为 id 的一部分。

高级应用:

但显然该方式并不灵活,因为我们的开发者需要告知用户创建菜单的名称是什麽,双方必须有一个约定期间如果有任何差别菜单都不会被正确的显示,这可不是我们所需要的于是更高级的应用则是使用 register_nav_menus 函数为主题注册一个菜单位置(Theme Locations)然后由用户来觉得将哪个菜单什么样的菜单放置到这个主题位置中去,这有点类似 drupal 中的区块(block)概念,这是一个平滑友好的接口:

首先,需要在主题中注册声明菜单位置:需要在你的主题模板 functions.php 中添加一个新的注册语句 register_nav_menus 该函数接收一个数组参数做为注册的菜单项,例要添加两个菜单一个用于导航一个用于页脚链接如 register_nav_menus(array(‘topMenu’ => ‘导航’, ‘subMenu’ => ‘页脚’)) 其中参数数组的下标用于在内部程序调用数组内容则显示给后台用户,添加该语句之后就可以在后台 外观 – 菜单 界面看到 Theme Locations 选择区块了,里面也可以看到我们新添加的这两个菜单位置一个叫导航另一个页脚;

然后,需要在主题模板文件中调用菜单:开发者可根据自己的需求在需要显示菜单的位置使用 wp_nav_menu 函数调用输出由用户自行配置的菜单如要输出导航位置的菜单可使用 wp_nav_menu(array(‘theme_location’ => ‘topMenu’)) 使用参数 theme_location 来指定前面声明的菜单位置,这样就建立了一个很好的中间层帮助用户和开发者处理菜单链接的问题。

补充说明:

另外 wp_nav_menu 也支持很多参数可供调用如:参数 container_id 和 container_class 用来定义输出的菜单外层标签属性;参数 container 用来定义菜单外层的 HTML 标签类型如 div 等等;参数 menu_id 和 menu_class 可用来定义菜单 ul 的 class 属性;参数 echo 可控制返回 return 还是直接输出我觉得 WP 的多数函数都应该添加该参数或者都改为 return 返回方式就像 drupal 一样返回值而不是输出;另外还有很多参数可从本文开头提供的链接查询。

2 thoughts on “【WP】如何添加新版 WordPress 菜单系统代码

  1. 范思哲

    对于象我一样的非专业的人士来说,这些函数都很难懂,能用插件就用插件了。

    有一些插件可以实现这些功能的。

发表评论

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