【问题标题】:How to add custom HTML to wp_nav_menu?如何将自定义 HTML 添加到 wp_nav_menu?
【发布时间】:2012-08-28 08:50:24
【问题描述】:

我熟悉 WordPress 并使用 WordPress 菜单系统。但我正在寻找一种将自定义 HTML 添加到 wp_nav_menu() 的方法。

我正在尝试创建这样的菜单:

请注意产品下的下拉菜单如何包含图像和链接。我想重新创建这个。我看过一些插件,但更愿意编写代码。

我不介意对图像和链接进行硬编码,但我想保持使用 WordPress 管理菜单的灵活性。

【问题讨论】:

标签: wordpress


【解决方案1】:

WordPress 通过菜单页面显示项目的方式是使用 walker 对象。在这种情况下,该对象的特定类称为 Walker_Nav_Menu。你可以在wp-includes\nav-menu-template.php找到它。

Walker_Nav_Menu 是一个非常简单的类。您可以看到链接和菜单结构是如何在那里构建的。函数start_elend_el 用于构建菜单项。函数start_lvlend_lvl 用于嵌套菜单。在这种方法中,我们将主要使用start_elend_el

在你的functions.php 创建一个类,用与父类非常相似的方法扩展Walker_Nav_Menu

class Custom_Walker_Nav_Menu extends Walker_Nav_Menu {
  function start_el ( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    // Copy all the start_el code from source, and modify
  }

  function end_el( &$output, $item, $depth = 0, $args = array() ) {
    // Copy all the end_el code from source, and modify
  }
}

在这些函数中,$item 是您的菜单项,您可以根据需要查询当前菜单项的附加内容。请注意,我没有包含start_lvlend_lvl,但这没关系,因为如果没有被覆盖,您的类将自动继承父类的方法。

然后,在您的主题文件中,您可以像这样调用 wp_nav_menu:

wp_nav_menu(array(
  'theme_location' => 'main',
  'container' => false,
  'menu_id' => 'nav',
  'depth' => 1,
  // This one is the important part:
  'walker' => new Custom_Walker_Nav_Menu
));

WordPress 将使用您的自定义类和函数,以便您可以修改输出的代码。

【讨论】:

  • 谢谢马丁,今晚我会详细介绍一下。我想我在 start_el 中添加了我的自定义 HTML?
  • 是的。您也可以在 start_el 中添加一个开始的 html 标记,并在 end_el 中将其关闭,但您可以保持简单;)
  • functions.php 的哪一部分放置类是否重要?例如,有几个函数,包括那里的设置函数。
  • 有没有办法在特定的li之间放置自定义代码?
  • 类现在被称为 class-walker-nav-menu.php 否则它就像一个魅力。虽然要复制很多行代码,但它的工作原理很容易理解,谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-18
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多