wordpress调用自定义菜单
wordpress要调用自定义菜单首先要注册菜单,将代码添加到主题文件夹下的function.php中,比如wordpress自带主题2019的定义如下
// This theme uses wp_nav_menu() in two locations. register_nav_menus( array( 'menu-1' => __( 'Primary', 'twentynineteen' ), 'footer' => __( 'Footer Menu', 'twentynineteen' ), 'social' => __( 'Social Links Menu', 'twentynineteen' ), ) );
这个表示导航栏的名称,左边是别名,右边是名称。别名会用在导航栏的调用上,名称则显示在菜单后台页面上
添加上述函数后,进入wp后台,在左侧菜单的“外观”里即多了“菜单”选项,primary,footer menu,social links menu就是可选的显示位置
在主题的header.php对应位置,引用导航栏。需要用到下面这个函数
<?php if ( has_nav_menu( 'menu-1' ) ) : ?>
<?php wp_nav_menu( array $args = array( 'menu' => "", // (int|string|WP_Term) Desired menu. Accepts a menu ID, slug, name, or object. 'menu_class' => "", // (string) CSS class to use for the ul element which forms the menu. Default 'menu'. 'menu_id' => "", // (string) The ID that is applied to the ul element which forms the menu. Default is the menu slug, incremented. 'container' => "", // (string) Whether to wrap the ul, and what to wrap it with. Default 'div'. 'container_class' => "", // (string) Class that is applied to the container. Default 'menu-{menu slug}-container'. 'container_id' => "", // (string) The ID that is applied to the container. 'fallback_cb' => "", // (callable|bool) If the menu doesn't exists, a callback function will fire. Default is 'wp_page_menu'. Set to false for no fallback. 'before' => "", // (string) Text before the link markup. 'after' => "", // (string) Text after the link markup. 'link_before' => "", // (string) Text before the link text. 'link_after' => "", // (string) Text after the link text. 'echo' => "", // (bool) Whether to echo the menu or return it. Default true. 'depth' => "", // (int) How many levels of the hierarchy are to be included. 0 means all. Default 0. 'walker' => "", // (object) Instance of a custom walker class. 'theme_location' => "", // 指定显示的导航名,如果没有设置,则显示第一个(如果调用多个菜单这项一定要加)(string) Theme location to be used. Must be registered with register_nav_menu() in order to be selectable by the user. 'items_wrap' => "", // (string) How the list items should be wrapped. Default is a ul with an id and class. Uses printf() format with numbered placeholders. 'item_spacing' => "", // (string) Whether to preserve whitespace within the menu's HTML. Accepts 'preserve' or 'discard'. Default 'preserve'. ) ); ?>
<?php endif; ?>
当然有些参数是可选的,可根据实际需要进行调用
2019主题的调用比较简单
<?php if ( has_nav_menu( 'menu-1' ) ) : ?> <?php wp_nav_menu( array( 'menu_class' => 'menu clearfix', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', ) ); ?> <!-- #site-navigation --> <?php endif; ?>
更多详情可参考https://developer.wordpress.org/reference/functions/wp_nav_menu/
<?php if ( has_nav_menu( 'footer' ) ) : ?> <?php wp_nav_menu( array( 'theme_location' => 'footer',//调用具体的位置菜单,否则默认显示第一个创建的菜单 'menu_class' => '', 'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>', ) ); ?> <!-- #site-navigation --> <?php endif; ?>
来个中文版的,更容易理解
<?php $parameter = array( 'theme_location' => '',//指定显示的导航名,如果没有设置,则显示第一个 'menu' => 'header-menu', 'container' => 'nav',//最外层容器标签名 'container_class' => 'primary',//最外层容器class名 'container_id' => '',//最外层容器id值 'menu_class' => 'sf-menu',//ul标签class 'menu_id' => 'topnav',//ul标签id 'echo' => true,//是否打印,默认是true,如果想将导航的代码作为赋值使用,可设置为false 'fallback_cb' => 'wp_page_menu',//备用的导航菜单函数,用于没有在后台设置导航时调用 'before' => '',//显示在导航a标签之前 'after' => '',//显示在导航a标签之后 'link_before' => '',//显示在导航链接名之后 'link_after' => '',//显示在导航链接名之前 'items_wrap' => '<ul id="%1$s">%3$s</ul>', 'depth' => 0,//显示的菜单层数,默认0,0是显示所有层 'walker' => ''//调用一个对象定义显示导航菜单 ); wp_nav_menu($parameter); ?>
![wechat](https://img2023.cnblogs.com/blog/567218/202306/567218-20230609164902212-848609210.jpg)
加微信交流