侧边栏壁纸
  • 累计撰写 26 篇文章
  • 累计创建 26 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

wp_get_nav_menu_items 函数详解

Administrator
2024-07-12 / 0 评论 / 0 点赞 / 85 阅读 / 0 字

wp_get_nav_menu_items 是一个 WordPress 函数,用于获取特定导航菜单中的所有菜单项。这个函数通常用于在模板文件中自定义菜单的显示方式,而不是使用默认的 wp_nav_menu 函数。

函数定义

wp_get_nav_menu_items( $menu, $args = array() )

参数说明

  1. $menu (必需)

    • 类型: int|string|WP_Term
    • 说明: 菜单的 ID、名称或 WP_Term 对象。
  2. $args (可选)

    • 类型: array
    • 说明: 额外的参数数组。默认值为空数组。

返回值

返回一个 WP_Post 对象数组,每个对象代表一个菜单项。如果没有找到菜单项,则返回 false

示例代码

假设我们要获取 header-menu 菜单的所有菜单项,并自定义显示它们,可以使用以下代码:

<?php
$menu_name = 'header-menu'; // 菜单位置标识符
$menu_items = wp_get_nav_menu_items( $menu_name );

if ( ! empty( $menu_items ) ) {
    echo '<ul class="custom-menu">';
    foreach ( $menu_items as $item ) {
        echo '<li class="menu-item">';
        echo '<a href="' . esc_url( $item->url ) . '">' . esc_html( $item->title ) . '</a>';
        echo '</li>';
    }
    echo '</ul>';
}
?>

详细解析

  1. 获取菜单项

    $menu_items = wp_get_nav_menu_items( $menu_name );
    
    • 通过 wp_get_nav_menu_items 函数获取菜单项。 $menu_name 可以是菜单的位置标识符、菜单的名称或菜单的 ID。
  2. 检查菜单项

    if ( ! empty( $menu_items ) ) {
    
    • 检查 $menu_items 是否为空,确保菜单中有项。
  3. 循环输出菜单项

    foreach ( $menu_items as $item ) {
        echo '<li class="menu-item">';
        echo '<a href="' . esc_url( $item->url ) . '">' . esc_html( $item->title ) . '</a>';
        echo '</li>';
    }
    
    • 使用 foreach 循环遍历 $menu_items,并输出每个菜单项。
    • esc_url( $item->url ) 用于安全地输出菜单项的链接 URL。
    • esc_html( $item->title ) 用于安全地输出菜单项的标题。

WP_Post 对象的属性

每个 WP_Post 对象代表一个菜单项,具有以下常用属性:

  • ID: 菜单项的 ID。
  • title: 菜单项的标题。
  • url: 菜单项的链接 URL。
  • menu_item_parent: 父菜单项的 ID。
  • post_excerpt: 菜单项的描述。
  • classes: 菜单项的 CSS 类(数组)。
  • object_id: 菜单项关联的对象 ID(例如,页面或文章的 ID)。
  • type: 菜单项的类型(例如,post_typetaxonomy 等)。

示例:获取和显示带有子菜单的菜单项

<?php
$menu_name = 'header-menu';
$menu_items = wp_get_nav_menu_items( $menu_name );

if ( ! empty( $menu_items ) ) {
    $menu_list = '<ul class="custom-menu">';
    $menu_list .= build_menu_items( $menu_items );
    $menu_list .= '</ul>';
    echo $menu_list;
}

function build_menu_items( $menu_items, $parent_id = 0 ) {
    $html = '';
    foreach ( $menu_items as $item ) {
        if ( $item->menu_item_parent == $parent_id ) {
            $html .= '<li class="menu-item">';
            $html .= '<a href="' . esc_url( $item->url ) . '">' . esc_html( $item->title ) . '</a>';
            // Check for child items
            $child_items = build_menu_items( $menu_items, $item->ID );
            if ( ! empty( $child_items ) ) {
                $html .= '<ul class="sub-menu">' . $child_items . '</ul>';
            }
            $html .= '</li>';
        }
    }
    return $html;
}
?>

详细解析

  1. 递归构建菜单项

    • build_menu_items 函数递归地构建菜单项,包括子菜单项。
    • 检查每个菜单项的 menu_item_parent 属性,以确定其父菜单项。
  2. 输出子菜单

    • 如果一个菜单项有子菜单项,则递归调用 build_menu_items 函数,并将子菜单项包含在 <ul class="sub-menu"> 元素内。

通过这种方式,您可以自定义菜单的显示方式,包括处理多级菜单结构。

0

评论区