WordPress中制造导航菜单的PHP外围办法解说

WordPress 3.0 引入导航菜单性能, 让页面的导航和链接的治理变得简略易用. WP 向用户提供了菜单治理页面和多种调用办法, 咱们先来看一下普通WordPress 的导航菜单都具备哪些性能.


治理菜单页面

页面门路: Appearance > Menus
由从界面来看, 可以创立多个菜单, 并且能够向菜单中增加自定义链接, 页面链接和分类链接.

但有一点需求留意, 假如将页面链接和分类链接退出, 被带入菜单的仅是链接, 而不是页面和分类自身, 也就是说, 子页面和子分类不会成为菜单的一局部.

另外, 咱们也不能在菜单中退出别的菜单, 所以这种自定义的菜单注定只存在一级. 在左边陈列菜单区块中, 只需将某个菜单往右移一格, 就能够作为上级菜单. 所以是能够创立多级的.
创立菜单后, 咱们就能够经过在 Widgets 页面将这些菜单增加到侧边栏上了.

注销自定义菜单

在菜单治理页面中留意到 Theme Locations 区块提醒如下:

The current theme does not natively support menus, but you can use the "Custom Menu" widget to add any menus you create here to the theme's sidebar.

意思是说, 如今你的主题不支持自定义菜单, 但能够经过 Widget 的形式将自定义加到主题的侧边栏. 那如何让主题也能支持自定义菜单呢? 请将以下代码加到 function.php 中.

register_nav_menus(array(
 'primary' => 'Primary Navigation'
));

这段代码用于记载一个自定义菜单, 你能够为它抉择详细的使用菜单, 其中 primary 应是惟一辨认符, Primary Navigation 是菜单的称号. 能够经过这个函数为主题增加多个自定义菜单. 假如在 function.php 增加注销办法如下:

register_nav_menus(array('primary' => 'Primary Navigation'));
register_nav_menus(array('secondary' => 'Secondary Navigation'));
register_nav_menus(array('bottom' => 'Bottom Navigation'));

在菜单治理页面将会看到如下图的内容.

主题调用菜单

在主题中如何调用菜单呢? 在主题的适宜地位应用办法 wp_nav_menu();, 向页面输入菜单.
办法中提供参数 theme_location, 用于指定对应的自定义菜单. 如要调用**个菜单, 则代码如下:

wp_nav_menu(array(
 'theme_location' =>'primary'
));

在默许状况下假如没有定义任何菜单, 应用 wp_nav_menu 办法与 wp_list_pages (调用页面列表) 办法无异, 但效率不迭后者. 所以, 假如你预备用页面列表或许分类列表作为导航菜单, 倡议不要应用 wp_nav_menu.

用法

在主题调用导航菜单, 办法很简略. 只要退出以下语句在页面上输入菜单.

<?php wp_nav_menu(); ?>

但其实这个办法提供了很多可配置的参数, 上面咱们逐一形容.

参数

参数列表来自 WordPress Codex, 上面逐一翻译, 并对不易了解的参数进行具体阐明.

$menu
(字符串)(可选) 希冀显示的菜单; 承受 (按程序婚配的) id, slug, name
默许值: None

咱们看一下 WordPress 取菜单的办法. 就像 Codex 上的形容一样, 它是按 id, slug, name 的程序去取的.

function wp_get_nav_menu_object( $menu ) {
 // 没有提供参数, 前往空
 if ( ! $menu )
 return false;
 
 // 依据 id 找
 $menu_obj = get_term( $menu, 'nav_menu' );
 
 // 假如找不到, 依据 slug 来找
 if ( ! $menu_obj )
 $menu_obj = get_term_by( 'slug', $menu, 'nav_menu' );
 
 // 假如还找不到, 再依据 name 来找
 if ( ! $menu_obj )
 $menu_obj = get_term_by( 'name', $menu, 'nav_menu' );
 
 // 最终没找到, 前往空
 if ( ! $menu_obj )
 $menu_obj = false;
 
 return $menu_obj;
}

$container
(字符串)(可选) ul 父节点的标签类型
默许值: p

千万不要认为什么标签都能够应用, 现实上只有 p 和 nav 会被采纳, 假如输出别的值, ul 父节点的标签将不会显示, 可见 Codex 的形容不够详尽. (从另一个角度看, WordPress 应用 nav 标签阐明它正在晋升对 HTML5 的支持力度.)

// 被容许应用的标签只有 p 和 nav
$allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags', array( 'p', 'nav' ) );

$container_class
(字符串)(可选) ul 父节点的 class 属性值
默许值: menu-{menu slug}-container

$container_id
(字符串)(可选) ul 父节点的 id 属性值
默许值: None

$menu_class
(字符串)(可选) ul 节点的 class 属性值
默许值: menu

$menu_id
(字符串)(可选) ul 节点的 id 属性值
默许值: menu slug, 自增长的

$echo
(布尔型)(可选) 决议间接显示菜单还是前往 HTML 片段
默许值: true (间接显示)

$fallback_cb
(字符串)(可选) 假如菜单不存在, 调用的回调函数
默许值: wp_page_menu (显示页面列表作为菜单)

这是一个很重要的办法, 能够经过它去兼容老版本主题. 上面咱们看看代码. 要害是 $args 也被传入 call_user_func 中. 例如, 咱们将参数 'sort_column'=>'menu_order' 写入 wp_nav_menu 的参数, 那它同样会被传到 call_user_func 办法中. 假如 call_user_func 是 wp_page_menu 办法, 那么显示的页面列表将以以为赋予的序号来排序输入.

// 假如找不到指定菜单, 或许菜单不存在任何条目并没有指定自定义菜单, 应用 call_user_func 办法来进行解决
if ( ( !$menu || is_wp_error($menu) || ( isset($menu_items) && empty($menu_items) && !$args->theme_location ) )
 && ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) )
 return call_user_func( $args->fallback_cb, (array) $args );

$before
(字符串)(可选) 显示在每个菜单链接前的文本
默许值: None

$after
(字符串)(可选) 显示在每个菜单链接后的文本
默许值: None

$link_before
(字符串)(可选) 显示在每个菜单链接文本前的文本
默许值: None

$link_after
(字符串)(可选) 显示在每个菜单链接文本后的文本
默许值: None

我怀疑 Codex 对 $before 与 $link_before, $after 与 $link_after 的形容是不是倒过去了?

$depth
(整型)(可选) 显示菜单的深度, 当数值为 0 时显示一切
默许值: 0

$walker
(字符串)(可选) 自定义的遍历对象
默许值: None

$theme_locaton
(字符串)(可选) the location in the theme to be used--must be registered with register_nav_menu() in order to be selectable by the user
默许值: None

假如主题在 function.php 中注销了 3 个自定义菜单, 如下:

register_nav_menus(array('primary' => 'Primary Navigation'));
register_nav_menus(array('secondary' => 'Secondary Navigation'));
register_nav_menus(array('bottom' => 'Bottom Navigation'));

要调用 Secondary Navigation 这个导航菜单, 则能够在 header.php 文件里应用以下语句:

wp_nav_menu(array(
 'theme_location' =>'secondary'
));

也就是说, 这是用来指定调用某个自定义菜单的.

以上就是安达网络工作室关于《WordPress中制作导航菜单的PHP核心方法讲解》的一些看法。更多内容请查看本栏目更多内容!

本文相关话题: WordPress 导航菜单 PHP PHP编程
版权声明:本文为 安达网络工作室 转载文章,如有侵权请联系我们及时删除。
相关文章
WordPress特定文章对搜寻引擎暗藏或只容许搜寻引擎查看

对搜寻引擎暗藏特定的文章 这个成绩的起源是这样的: 家喻户晓,随着搜寻引擎的改进,会越来越排挤采集和伪...

wordpress设置友谊链接只在首页显示的办法

关于有的主题,当从后盾小工具中增加友谊链接后,却发现其是为全站显示的。假如只心愿让它在首页显示,则能...

WordPress中登陆后封闭登陆页面及设置用户不可见栏目

用户登录后封闭登录页面 WordPress默许的登录页面是:http://WP目录/wp-login.php,登录后会主动跳转到:ht...

详解WordPress开发中get_header()获取头部函数的用法

函数意义详解 从以后主题调用header.php文件。是不是很简略?好吧,假如你是老手的话这里要提示一下,这里的...

WordPress中访客登陆完成邮件提示的PHP脚本实例分享

登陆邮件提示完成办法 前提是空间有邮件性能,测试有无邮件性能的办法:登录界面点击“遗记明码”,有邮件...

封闭wordpress新用户注册邮件告诉的办法

本文实例讲述了封闭wordpress新用户注册邮件告诉的办法。分享给大家供大家参考。详细剖析如下: wordpress博...

需求提交

客服服务