20

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

我正在尝试创建这样的菜单: 在此处输入图像描述

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

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

4

1 回答 1

60

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

Walker_Nav_Menu是一个非常简单的类。您可以看到链接和菜单结构是如何在那里构建的。函数start_elend_el用于构建菜单项。函数start_lvlend_lvl用于嵌套菜单。在这种方法中,我们将主要使用start_eland end_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_lvland end_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 将使用您的自定义类和函数,以便您可以修改输出的代码。

于 2012-09-03T16:08:18.967 回答