log1x/navi

WordPress NavWalker 的开发者友好替代品。

维护者

详细信息

github.com/Log1x/navi

源代码

问题

资助包维护!
Log1x

安装: 371,508

依赖项: 6

建议者: 1

安全: 0

星标: 311

关注者: 13

分支: 29

类型:package

v3.0.3 2024-04-23 11:30 UTC

This package is auto-updated.

Last update: 2024-09-23 12:20:42 UTC


README

Latest Stable Version Total Downloads Build Status

讨厌 WordPress NavWalker? 我也是

Navi 是 NavWalker 的开发者友好替代品。使用模板/视图中的可迭代对象轻松构建 WordPress 菜单。

需求

安装

Bedrock(或 Sage)

通过 Composer 安装

$ composer require log1x/navi

手动

下载最新版本 .zip 文件并安装到 wp-content/plugins

使用方法

查看 示例 文件夹以了解如何在项目中使用 Navi。

基本使用

<?php

use Log1x\Navi\Navi;

$navigation = Navi::make()->build('primary_navigation');

if ($navigation->isEmpty()) {
  return;
}

return $navigation->toArray();

在构建导航菜单时,Navi 保留菜单对象,并通过 get() 方法使其可用。

默认情况下,get() 返回原始 wp_get_nav_menu_object() 允许您直接访问它。

可选地,您可以传递一个 keydefault 来调用特定的对象键,并提供回退值,使其为 null、空或未设置。

$navigation->get()->name;
$navigation->get('name', 'My menu title');

Acorn 使用

如果您正在使用 Navi 与 Acorn(例如 Sage)一起使用,您可以使用 Acorn 的 CLI 生成可用的视图组件。

$ acorn make:navi

生成后,您可以在现有视图中使用 视图组件,如下所示:

<x-navigation />

访问页面对象

如果您的菜单项链接到页面对象(例如,不是自定义链接)- 您可以使用 objectId 属性检索页面 ID。

# Blade
{{ get_post_type($item->objectId) }}

# PHP
<?php echo get_post_type($item->objectId); ?>

访问自定义字段

在需要访问直接附加到您的菜单项的自定义字段的情况下,您可以使用 id 属性检索菜单项 ID。

以下示例将获取使用 ACF 添加 到我们的菜单的标签覆盖字段 - 如果字段为空,则回退到默认菜单标签。

# Blade
{{ get_field('custom_nav_label', $item->id) ?: $item->label }}

# PHP
<?php echo get_field('custom_nav_label', $item->id) ?: $item->label; ?>

示例输出

在调用 build() 时,Navi 将解析传递的导航菜单,并返回一个包含您的菜单项的流畅容器。要返回对象数组,只需调用 ->toArray()

默认情况下,build() 调用 primary_navigation,这是 Sage 上的默认菜单主题位置。

array [
  5 => {
    +"active": true
    +"activeAncestor": false
    +"activeParent": false
    +"classes": "example"
    +"dbId": 5
    +"description": false
    +"id": 5
    +"label": "Home"
    +"object": "page"
    +"objectId": "99"
    +"parent": false
    +"slug": "home"
    +"target": "_blank"
    +"title": false
    +"type": "post_type"
    +"url": "https://sage.test/"
    +"xfn": false
    +"order": 1
    +"parentObjectId": false
    +"children": false
  }
  6 => {
    +"active": false
    +"activeAncestor": false
    +"activeParent": false
    +"classes": false
    +"dbId": 6
    +"description": false
    +"id": 6
    +"label": "Sample Page"
    +"object": "page"
    +"objectId": "100"
    +"parent": false
    +"slug": "sample-page"
    +"target": false
    +"title": false
    +"type": "post_type"
    +"url": "https://sage.test/sample-page/"
    +"xfn": false
    +"order": 2
    +"parentObjectId": false
    +"children": array [
      7 => {
        +"active": false
        +"activeAncestor": false
        +"activeParent": false
        +"classes": false
        +"dbId": 7
        +"description": false
        +"id": 7
        +"label": "Example"
        +"object": "custom"
        +"objectId": "101"
        +"parent": 6
        +"slug": "example"
        +"target": false
        +"title": false
        +"type": "custom"
        +"url": "#"
        +"xfn": false
        +"order": 3
        +"parentObjectId": 100
        +"children": array [
          ...
        ]
      }
    ]
  }
]

话虽如此,根据您的菜单深度,您最终可以无限循环调用 ->children

错误报告

如果您在 Navi 中发现错误,请 提交问题

贡献

无论是通过 PR、报告问题还是提出建议,都鼓励并感谢您的贡献。

许可协议

Navi 在 MIT 许可证 下提供。