WordPress中制作导航菜单的PHP核心方法讲解

前端之家收集整理的这篇文章主要介绍了WordPress中制作导航菜单的PHP核心方法讲解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_403_0@wordpress 3.0 引入导航菜单功能,让页面的导航和链接的管理变得简单易用. WP 向用户提供了菜单管理页面和多种调用方法,我们先来看一下一般wordpress 的导航菜单都具有哪些功能.


@H_403_0@

管理菜单页面

@H_403_0@页面路径: Appearance > Menus 由从界面来看,能够创建多个菜单,并且可以向菜单添加自定义链接,页面链接分类链接.

@H_403_0@

@H_403_0@但有一点需要注意,如果将页面链接分类链接加入,被带入菜单的仅是链接,而不是页面分类本身,也就是说,子页面子分类不会成为菜单的一部分.

@H_403_0@另外,我们也不能在菜单中加入别的菜单,所以这种自定义菜单注定只存在一级. 在右边排列菜单区块中,只要将某个菜单往右移一格,就可以作为下级菜单. 所以是可以创建多级的. 创建菜单后,我们就可以通过在 Widgets 页面将这些菜单添加侧边栏上了.

@H_403_0@

@H_403_0@

登记自定义菜单

@H_403_0@在菜单管理页面中注意到 Theme Locations 区块提示如下:

@H_403_0@意思是说,现在你的主题不支持自定义菜单,但可以通过 Widget 的方式将自定义加到主题侧边栏. 那如何让主题也能支持自定义菜单呢? 请将以下代码加到 function.PHP 中.

'Primary Navigation' ));
@H_403_0@这段代码用于记录一个自定义菜单,你可以为它选择具体的应用菜单,其中 primary 应是唯一识别符,Primary Navigation 是菜单名称. 可以通过这个函数主题添加多个自定义菜单. 如果在 function.PHP 添加登记方法如下:

'Primary Navigation')); register_nav_menus(array('secondary' => 'Secondary Navigation')); register_nav_menus(array('bottom' => 'Bottom Navigation'));
@H_403_0@在菜单管理页面将会看到如下图的内容.

@H_403_0@

@H_403_0@

主题调用菜单

@H_403_0@在主题中如何调用菜单呢? 在主题的适合位置使用方法 wp_nav_menu();,向页面输出菜单. 方法中提供参数 theme_location,用于指定对应的自定义菜单. 如要调用第一个菜单,则代码如下:

'primary' ));
@H_403_0@在默认情况下如果没有定义任何菜单,使用 wp_nav_menu 方法与 wp_list_pages (调用页面列表) 方法无异,但效率不及后者. 所以,如果你准备用页面列表或者分类列表作为导航菜单,建议不要使用 wp_nav_menu.

@H_403_0@

用法

@H_403_0@在主题调用导航菜单,方法很简单. 只需加入以下语句在页面输出菜单.

PHP;">
@H_403_0@但其实这个方法提供了很多可配置的参数,下面我们逐一描述.

@H_403_0@

参数

@H_403_0@参数列表来自 wordpress Codex,下面逐一翻译,并对不易理解的参数进行详细说明.

@H_403_0@

$menu

(字符串)(可选) 期望显示菜单; 接受 (按顺序匹配的) id,slug,name 默认值: None

@H_403_0@我们看一下 wordpress菜单方法. 就像 Codex 上的描述一样,它是按 id,name 的顺序去取的.

PHP;"> 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','nav_menu' );

// 最终没找到,返回空
if ( ! $menu_obj )
$menu_obj = false;

return $menu_obj;
}

@H_403_0@

$container

(字符串)(可选) ul 父节点的标签类型 默认值: div

@H_403_0@千万不要以为什么标签都可以使用,事实上只有 div 和 nav 会被采用,如果输入别的值,ul 父节点的标签将不会显示,可见 Codex 的描述不够详尽. (从另一个角度看,wordpress 使用 nav 标签说明它正在提升对 HTML5 的支持力度.)

PHP;"> // 被允许使用的标签只有 div 和 nav $allowed_tags = apply_filters( 'wp_nav_menu_container_allowedtags',array( 'div','nav' ) );
@H_403_0@

$container_class

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

@H_403_0@

$container_id

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

@H_403_0@

$menu_class

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

@H_403_0@

$menu_id

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

@H_403_0@

$echo

(布尔型)(可选) 决定直接显示菜单还是返回 HTML 片段 默认值: true (直接显示)

@H_403_0@

$fallback_cb

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

@H_403_0@这是一个很重要的方法,可以通过它去兼容老版本主题. 下面我们看看代码. 关键是 $args 也被传入 call_user_func 中. 例如,我们将参数 'sort_column'=>'menu_order' 写入 wp_nav_menu 的参数,那它同样会被传到 call_user_func 方法中. 如果 call_user_func 是 wp_page_menu 方法,那么显示页面列表将以认为赋予的序号来排序输出.

theme_location ) ) && ( function_exists($args->fallback_cb) || is_callable( $args->fallback_cb ) ) ) return call_user_func( $args->fallback_cb,(array) $args );
@H_403_0@

$before

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

@H_403_0@

$after

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

@H_403_0@

$link_before

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

@H_403_0@

$link_after

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

@H_403_0@我怀疑 Codex 对 $before 与 $link_before,$after 与 $link_after 的描述是不是倒过来了?

@H_403_0@

$depth

(整型)(可选) 显示菜单的深度,当数值为 0 时显示所有 默认值: 0

@H_403_0@

$walker

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

@H_403_0@

$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

@H_403_0@如果主题在 function.PHP 中登记了 3 个自定义菜单,如下:

'Primary Navigation')); register_nav_menus(array('secondary' => 'Secondary Navigation')); register_nav_menus(array('bottom' => 'Bottom Navigation'));
@H_403_0@要调用 Secondary Navigation 这个导航菜单,则可以在 header.PHP 文件里使用以下语句:

'secondary' ));
@H_403_0@也就是说,这是用来指定调用某个自定义菜单的.

原文链接:https://www.f2er.com/php/20789.html

猜你在找的PHP相关文章