wp_nav_menu( array('theme_location' => '',//导航别名'menu' => '', //期望显示的菜单'container' => 'div', //容器标签'container_class
从wp_nav_menu中获取菜单项,然后检查这些菜单项是否对应分类(Category),并输出这些分类的ID。以下是完整的代码实现:<? 示例输出:假设菜单中有两个分类,ID分别为2和4,那么输出将是:2,4如何使用:将上述代码替换掉你原来的wp_nav_menu调用代码,放在需要输出分类ID的位置即可。
WordPress 中有一个导航菜单函数wp_nav_menu,通过这个函数可以控制菜单输出的HTML 结构,一般开发者用这个函数的一般是在输出HTML 中自定义一些id 或者class 而已,整体的HTML wp_nav_menu 函数 囿于篇幅,本文不会教你怎么使用wp_nav_menu 函数,请自行补习。 通过设置wp_nav_menu 的参数,前台输出的HTML 结构大概都是这样的(为了简洁,去除了一些id、class):
标准菜单位置调用(99%场景)后台“外观→菜单”里把菜单A指派到菜单位置primary,模板里写:// header.php 或任意模板if ( has_nav_menu( 'primary' ) ) { wp_nav_menu 直接指定某个菜单(不依赖菜单位置)有时你想无视菜单位置,只想输出“名叫Guest Menu”的菜单:wp_nav_menu( [ 'menu' => 'Guest Menu', 用Walker输出自定义结构(Bootstrap/Tailwind/多级)wp_nav_menu( [ 'theme_location' => 'primary', 'walker' menu', function ( $atts ) { $atts = shortcode_atts( [ 'name' => '' ], $atts ); ob_start(); wp_nav_menu 一句话总结常规输出 → wp_nav_menu( [‘theme_location’=>’xxx’] )无视位置 → wp_nav_menu( [‘menu’=>’菜单名’] )改结构 → 传自定义 Walker
我前面撰写了一个新函数 wpjam_nav_menu,它是缓存版的 wp_nav_menu。 在当前主题的 functions.php 文件中添加如下代码: //给 wp_nav_menu 加上对象缓存,加快效率 add_filter( 'pre_wp_nav_menu', 'wpjam_get_nav_menu_cache empty( $cached_menu ) ) return $cached_menu; return $nav_menu; } add_filter( 'wp_nav_menu
=> __( '底部链接', 'mytheme' ), 'handheld' => __( '移动端抽屉菜单', 'mytheme' ), ] );} );在前端输出菜单wp_nav_menu wp_nav_menu( [ 'theme_location' => 'primary', // 对应 register_nav_menus 的 key 'container' if ( has_nav_menu( 'primary' ) ) { wp_nav_menu( [ 'theme_location' => 'primary' ] );}is_nav_menu($ item, $depth = 0, $args = null, $id = 0 ) { // 自定义
WordPress 自定义菜单功能是非常好用的一个功能,但是我们在实际使用的过程当中,却发现一个非常严重的问题,效率非常低下,如果自定义菜单比较复杂的话,会产生多达十几条甚至几十条的 SQL 查询,我认真查看了下 wp_nav_menu 函数的源代码发现其没使用进行缓存,但是 wp_nav_menu 又没有足够多的 hook,于是我只能重写了一个 wpjam_nav_menu 函数,使用 WordPress Transients API WPJAM Memcached Nav Menu Plugin URI: http://blog.wpjam.com/m/wpjam_nav_menu/ Description: 使用内存缓存提高 wp_nav_menu 效率 Version: 0.1 Author: Denis Author URI: http://blog.wpjam.com/ */ //给 wp_nav_menu 加上对象缓存,加快效率 function 然后在主题模板中(一般在 header.php 文件中)使用 wpjam_nav_menu 函数替代原来的 wp_nav_menu 即可。 ----
我们只需在需要放菜单的地方 放如下代码 wp_nav_menu(array( 'theme_location'=>'header-menu', 'depth'=>'1', ) ); 很显然,theme_location 的参数为创建的导航别名 depth代表导航级数 例如上面这段代码表示调用别名为header-menu的一级导航 相关参数还有很多 完整代码如下 wp_nav_menu(array( 'theme_location items_wrap值为 '%3$s' 去ul保持li不变 更多相关的内容 参考官方对菜单函数的说明 https://developer.wordpress.org/reference/functions/wp_nav_menu 输出的结构是这样的 (方便起见,不写类名) 如果我们要更改输出的结构 像外层div 只需 'container' => false 即可 如果要去除外层ul 那么可以这样写 if(function_exists('wp_nav_menu ')) { wp_nav_menu(array('container'=> false,'items_wrap'=>'%3$s','theme_location'=>'main-menu')); } 那么输出的结构就只是
2、确定菜单位置名称 开始下一步前,我们需要知道菜单位置名称,也就是theme_location参数的值,用文本编辑器打开当前主题目录中的header.php,搜索wp_nav_menu一般都能找到这个值 ,代码一般长这样: // theme_location后面的 top 就是我们要找的值 wp_nav_menu( array( 'theme_location' => 'top', 'menu_id'
wp_nav_menu 之后,在主题中添加自定义菜单。在主题中合适的位置,添加下面的函数: <? php wp_nav_menu( array( 'theme_location' => 'header-menu' )); ?> 这句代码使用了 wp_nav_menu 函数。 php wp_nav_menu( $defaults ); ?
php wp_nav_menu( array( 'theme_location' => 'primary', 'container
php wp_nav_menu(); ?> 指定的导航菜单 <?php wp_nav_menu( array('menu' => 'Project Nav' )); ?
然后我们到主题的显示菜单的位置通过以下 wp_nav_menu() 就能把刚才定义的菜单显示出来,当然 wp_nav_menu() 这个函数可以有非常详细的参数,但是这里只要简单使用就可以,在特殊的情况下才可能使用到
php $nav = wp_nav_menu( array( 'container
style.css) bloginfo('template_url'):模板文件目录 wp_head():头部挂钩,通过该函数让其他插件或功能函数在网站头部输出css,js等 wp_footer():同上类似 wp_nav_menu
php wp_nav_menu(array('theme_location'=>'primary'));?
模板里照常调用:wp_nav_menu( [ 'theme_location' => 'primary' ] );优点不依赖插件,逻辑集中,可版本控制。
partner_url', true); // 自定义输出...endwhile;方案B:使用导航菜单利用WordPress强大的菜单系统管理链接:创建名为”友情链接”的菜单使用自定义链接添加通过wp_nav_menu
register_nav_menu(),注册单个自定义的主题页面菜单 register_nav_menus(),注册多个自定义的主题页面菜单 unregister_nav_menu(),删除菜单注册 wp_nav_menu has_nav_menu(),判断某个注册的菜单是否已经被分配菜单 wp_nav_menu默认参数 <?
unregister_sidebar wp_add_inline_style wp_clean_themes_cache wp_get_archives wp_get_nav_menu_items wp_get_theme wp_nav_menu