2
A
回答
4
的wp_nav_menu()
函數中定義WP-包括/ NAV-菜單的template.php:
function wp_nav_menu($args = array()) {
static $menu_id_slugs = array();
$defaults = array('menu' => '', 'container' => 'div', 'container_class' => '', 'container_id' => '', 'menu_class' => 'menu', 'menu_id' => '',
'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'depth' => 0, 'walker' => '', 'theme_location' => '');
$args = wp_parse_args($args, $defaults);
$args = apply_filters('wp_nav_menu_args', $args);
$args = (object) $args;
// Get the nav menu based on the requested menu
$menu = wp_get_nav_menu_object($args->menu);
// Get the nav menu based on the theme_location
if (! $menu && $args->theme_location && ($locations = get_nav_menu_locations()) && isset($locations[ $args->theme_location ]))
$menu = wp_get_nav_menu_object($locations[ $args->theme_location ]);
// get the first menu that has items if we still can't find a menu
if (! $menu && !$args->theme_location) {
$menus = wp_get_nav_menus();
foreach ($menus as $menu_maybe) {
if ($menu_items = wp_get_nav_menu_items($menu_maybe->term_id)) {
$menu = $menu_maybe;
break;
}
}
}
// If the menu exists, get its items.
if ($menu && ! is_wp_error($menu) && !isset($menu_items))
$menu_items = wp_get_nav_menu_items($menu->term_id);
// If no menu was found or if the menu has no items and no location was requested, call the fallback_cb if it exists
if ((!$menu || is_wp_error($menu) || (isset($menu_items) && empty($menu_items) && !$args->theme_location))
&& $args->fallback_cb && is_callable($args->fallback_cb))
return call_user_func($args->fallback_cb, (array) $args);
// If no fallback function was specified and the menu doesn't exists, bail.
if (!$menu || is_wp_error($menu))
return false;
$nav_menu = $items = '';
$show_container = false;
if ($args->container) {
$allowed_tags = apply_filters('wp_nav_menu_container_allowedtags', array('div', 'nav'));
if (in_array($args->container, $allowed_tags)) {
$show_container = true;
$class = $args->container_class ? ' class="' . esc_attr($args->container_class) . '"' : ' class="menu-'. $menu->slug .'-container"';
$id = $args->container_id ? ' id="' . esc_attr($args->container_id) . '"' : '';
$nav_menu .= '<'. $args->container . $id . $class . '>';
}
}
// Set up the $menu_item variables
_wp_menu_item_classes_by_context($menu_items);
$sorted_menu_items = array();
foreach ((array) $menu_items as $key => $menu_item)
$sorted_menu_items[$menu_item->menu_order] = $menu_item;
unset($menu_items);
$sorted_menu_items = apply_filters('wp_nav_menu_objects', $sorted_menu_items, $args);
$items .= walk_nav_menu_tree($sorted_menu_items, $args->depth, $args);
unset($sorted_menu_items);
// Attributes
if (! empty($args->menu_id)) {
$wrap_id = $args->menu_id;
} else {
$wrap_id = 'menu-' . $menu->slug;
while (in_array($wrap_id, $menu_id_slugs)) {
if (preg_match('#-(\d+)$#', $wrap_id, $matches))
$wrap_id = preg_replace('#-(\d+)$#', '-' . ++$matches[1], $wrap_id);
else
$wrap_id = $wrap_id . '-1';
}
}
$menu_id_slugs[] = $wrap_id;
$wrap_class = $args->menu_class ? $args->menu_class : '';
// Allow plugins to hook into the menu to add their own <li>'s
$items = apply_filters('wp_nav_menu_items', $items, $args);
$items = apply_filters("wp_nav_menu_{$menu->slug}_items", $items, $args);
$nav_menu .= sprintf($args->items_wrap, esc_attr($wrap_id), esc_attr($wrap_class), $items);
unset($items);
if ($show_container)
$nav_menu .= '</' . $args->container . '>';
$nav_menu = apply_filters('wp_nav_menu', $nav_menu, $args);
if ($args->echo)
echo $nav_menu;
else
return $nav_menu;
}
您可以更改基礎上的$ args你,當你調用該函數添加HTML。看Codex,Function Reference wp_nav_menu()
0
wp_nav_menu()可以被看作是一個有自己方法的助手。如果它不能滿足你的需求,你可以創建你自己的。
+0
嗯...我還沒有完全理解它,雖然它似乎沒有我的菜單自定義的很多自由。看來,我只用CSS來控制它。我似乎無法寫我的不同的代碼。 –
相關問題
- 1. 如何在WordPress wp_nav_menu()
- 2. 如何在wp_nav_menu()函數中設置css和html結構wordpress
- 3. 在wp_nav_menu功能在WordPress
- 4. WordPress的帖子ID在wp_nav_menu?
- 5. WordPress的wp_nav_menu在Safari中無法顯示
- 6. wordpress wp_nav_menu
- 7. 如何使用wp_nav_menu()在Wordpress中自定義html菜單?
- 8. WordPress的wp_nav_menu()
- 9. 在wp_nav_menu
- 10. 在wp_nav_menu
- 11. wordpress wp_nav_menu - 在wordpress中添加名稱屬性到<a>
- 12. 如何更改在Wordpress動作中插入的HTML位置
- 13. 如何在wordpress中添加wp_nav_menu中的類
- 14. 將圖像放在wordpress中的位置
- 15. 在wordpress中尋找next_posts_link()的位置?
- 16. wp_nav_menu不工作WordPress的
- 17. WordPress的wp_nav_menu排除類別
- 18. 地理位置在WordPress
- 19. 如何在wordpress中添加wp_nav_menu函數的自定義鏈接
- 20. 如果wp_nav_menu類別/頁存在
- 21. 插入格在wp_nav_menu
- 22. 如何在Wordpress wp_nav_menu中添加link_after和lin_before類?
- 23. html元素在javascript中的位置
- 24. 在CSS和html中的位置問題
- 25. 在Python中的HTML元素位置
- 26. 在html中的位置固定標題
- 27. ng-app在html標記中的位置
- 28. wordpress wp_nav_menu之前之後
- 29. 修改wordpress wp_nav_menu網址
- 30. Wordpress wp_nav_menu不顯示菜單
儘管如此,你不應該修改wp-includes下的文件,除非你想要你的下一次更新來殺死你的修改 –
完全同意!我發現瞭解代碼的最好方法就是查看源代碼。 –
沒錯。雖然,所以沒有爲要顯示的菜單加載的模板文件。這個功能單獨顯示這一切?如果我想創建一個包含大量HTML的菜單,該怎麼辦?有沒有辦法可以做到這一點? –