nav_menu_item_title
云策文档标注
概述
nav_menu_item_title 是一个 WordPress 过滤器钩子,用于修改导航菜单项的标题输出。它允许开发者在菜单项标题渲染前进行自定义处理,例如添加额外 HTML 元素或调整内容。
关键要点
- 过滤器钩子:nav_menu_item_title,用于过滤菜单项标题字符串。
- 参数:$title(标题字符串)、$menu_item(WP_Post 对象)、$args(wp_nav_menu() 参数对象)、$depth(菜单项深度)。
- 应用场景:可基于菜单项属性(如是否有子菜单)动态修改标题,例如添加下拉箭头图标。
- 替代方案:对于简单添加内容,可考虑使用 wp_nav_menu() 的 after 或 link_after 参数。
代码示例
/**
* Add a dropdown arrow in the navigation menu, for menu items that
* have a dropdown sub-menu. Returns all other menu item titles unchanged.
*
* @param string $title The menu item's title.
* @param WP_Post $menu_item The current menu item object.
*
* @return string
*/
function wpdocs_nav_menu_add_dropdown_arrow( $title, $menu_item ) {
$menu_item_classes = $menu_item->classes;
// If menu item doesn't have any classes or children, return unchanged title.
if ( empty( $menu_item_classes ) || ! in_array( 'menu-item-has-children', $menu_item_classes ) ) {
return $title;
}
// Add div around original text to separate it from down arrow
// (if you need a way to select only the text with CSS)
$output_title = '';
$output_title .= $title;
$output_title .= '';
// Add downward arrow HTML
$output_title .= ;
return $output_title;
}
add_filter( 'nav_menu_item_title', 'wpdocs_nav_menu_add_dropdown_arrow', 10, 2 );注意事项
- 确保过滤器函数返回修改后的标题字符串,否则可能影响菜单显示。
- 使用前检查 $menu_item 对象属性,避免对非目标菜单项进行不必要的修改。
- 此钩子自 WordPress 4.4.0 版本引入,兼容性需考虑。
原文内容
Filters a menu item’s title.
Parameters
$titlestring-
The menu item’s title.
$menu_itemWP_Post-
The current menu item object.
$argsstdClass-
An object of wp_nav_menu() arguments.
More Arguments from wp_nav_menu( … $args )
Array of nav menu arguments.
menuint|string|WP_TermDesired menu. Accepts a menu ID, slug, name, or object.menu_classstringCSS class to use for the ul element which forms the menu.
Default'menu'.menu_idstringThe ID that is applied to the ul element which forms the menu.
Default is the menu slug, incremented.containerstringWhether to wrap the ul, and what to wrap it with.
Default'div'.container_classstringClass that is applied to the container.
Default ‘menu-{menu slug}-container’.container_idstringThe ID that is applied to the container.container_aria_labelstringThe aria-label attribute that is applied to the container when it’s a nav element.fallback_cbcallable|falseIf the menu doesn’t exist, a callback function will fire.
Default is'wp_page_menu'. Set to false for no fallback.beforestringText before the link markup.afterstringText after the link markup.link_beforestringText before the link text.link_afterstringText after the link text.echoboolWhether to echo the menu or return it. Default true.depthintHow many levels of the hierarchy are to be included.
0 means all. Default 0.
Default 0.walkerobjectInstance of a custom walker class.theme_locationstringTheme location to be used. Must be registered with register_nav_menu() in order to be selectable by the user.items_wrapstringHow the list items should be wrapped. Uses printf() format with numbered placeholders. Default is a ul with an id and class.item_spacingstringWhether to preserve whitespace within the menu’s HTML.
Accepts'preserve'or'discard'. Default'preserve'.
$depthint-
Depth of menu item. Used for padding.
Source
$title = apply_filters( 'nav_menu_item_title', $title, $menu_item, $args, $depth );
Changelog
| Version | Description |
|---|---|
| 4.4.0 | Introduced. |
Skip to note 2 content
jichanbachan
You can use this hook to add HTML elements into the tag of a specific type of nav menu item.
For example, if you have items in the nav menu that act as dropdown menus, you may want to add a HTML element that displays a downward arrow beside only those menu items, while keeping the other menu items unchanged.
If you just want to add something to the end of all menu items, you can instead use the
afterorlink_afterarguments when callingwp_nav_menu().functions.php
/** * Add a dropdown arrow in the navigation menu, for menu items that * have a dropdown sub-menu. Returns all other menu item titles unchanged. * * @param string $title The menu item's title. * @param WP_Post $menu_item The current menu item object. * * @return string */ function wpdocs_nav_menu_add_dropdown_arrow( $title, $menu_item ) { $menu_item_classes = $menu_item->classes; // If menu item doesn't have any classes or children, return unchanged title. if ( empty( $menu_item_classes ) || ! in_array( 'menu-item-has-children', $menu_item_classes ) ) { return $title; } // Add div around original text to separate it from down arrow // (if you need a way to select only the text with CSS) $output_title = '<div class="menu-item-has-children-text">'; $output_title .= $title; $output_title .= '</div>'; // Add downward arrow HTML $output_title .= <img src="./downarrow.jpg" />; return $output_title; } add_filter( 'nav_menu_item_title', 'wpdocs_nav_menu_add_dropdown_arrow', 10, 2 );