【Wordpress主题编写】Wordpress菜单输出

哈哈哈,不得不说我是真的能鸽啊!!
这是一篇来自2022年10月份的文章了。
此文章于2023年4月10日正式编写!!
那么,我们开始教程吧!!

这次要教学的就是如何添加Wordpress的菜单选项???
Wordpress的很多函数都不是一次性全部展现出来的,他有极多部分是没有输出的,比如这个【菜单】选项?
如果你是主题开发者你会发现你翻遍Wordprsss后台就是看不到一个【菜单】选项的影子。
其实道理很简单,你没有输出【菜单】选项,说白点就是WP官方没有直接输出菜单设置。
我们要如何调用出菜单设置呢???则需要用到下方的代码来给自己添加菜单!!

register_nav_menus(array(
    'PrimaryMenu'=>'导航',
// 'PrimaryMenu'|是菜单的英文名字也相当于他的ID或者理解为他的专属Key|这里我就简称为【Key】吧
// '导航',|是后台【外观>菜单】设置中的菜单名字,你可以输出英文名或者中文名?都是可以的!
//一行代表一个菜单选择,如果你写了四个那么后台的【外观>菜单】设置中的菜单选择就有四个,自行搭配使用
));

这段代码放在你的【functions.php】文件当中即可哦~这样你就可以在后台的【外观】中找到【菜单】设置选项了!
接下来就是如何在我们想要加载的地方调用呢???
其实这蛮简单的呢

 if (isset($locations['PrimaryMenu'])) {
            wp_nav_menu(array(
                    'menu' => 'nav-top',
                    'theme_location' => 'nav-top',
                    'depth' => 3,
                    'container' => 'nav',
                    'container_class' => 'maple',
                    'menu_class' => 'box',
                    'items_wrap' => '<ul class="%2$s">%3$s</ul>',
                    'walker' => '',
                )
            );
        }

将这段代码放在你要输出导航栏的文件中即可
如果你想调用其他的菜单栏只需要把$locations['PrimaryMenu']中的【PrimaryMenu】替换即可!
切记这只能替换成其他等待【Key】而不是输出的中文or英文名

这下面的内容就是导航栏的高级用法了~
喜欢折腾的可以看一下~

//这里是全局解释
wp_nav_menu( array(
    'theme_location'  => '',//导航别名
    'menu'   => '', //期望显示的菜单
    'container'  => 'div',  //容器标签
    'container_class' => '',//ul父节点class值
    'container_id'  => '',  //ul父节点id值
    'menu_class'   => 'menu',   //ul节点class值
    'menu_id'   => '',  //ul节点id值
    'echo'  => true,//是否输出菜单,默认为真
    'fallback_cb' => 'wp_page_menu',  //菜单不存在时,返回默认菜单,设为false则不返回
    'before' => '', //链接前文本
    'after'  => '', //链接后文本
    'link_before'  => '',   //链接文本前
    'link_after'  => '',//链接文本后
    'items_wrap'  => '<ul id="%1$s" class="%2$s">%3$s</ul>',   //如何包装列表
    'depth' => 0,   //显示几级菜单栏,默认0
    'walker' => ''  //自定义walker
  ) );
//这里是菜单栏的高级用法看各行解释吧~ 
function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        global $wp_query;
        $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : '' ); // 缩进

        // 定义li的样式
        $depth_classes = array(
            ( $depth == 0 ? 'main-menu-item' : 'sub-menu-item' ),   //一级的li,就main-menu-item,其余全部sub-menu-item
            ( $depth >=2 ? 'sub-sub-menu-item' : '' ),  //三级的li,添加这个样式
            ( $depth % 2 ? 'menu-item-odd' : 'menu-item-even' ),    //奇数加样式menu-item-odd,偶数加样式menu-item-even
            'menu-item-depth-' . $depth,    //层级同上
        );
        $depth_class_names = esc_attr( implode( ' ', $depth_classes ) );

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $class_names = esc_attr( implode( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ) ); //这句我没看懂,不知道是在干啥

        // 把样式合成到li里面
        $output .= $indent . '<li id="nav-menu-item-'. $item->ID . '" class="' . $depth_class_names . ' ' . $class_names . '">';

        // 处理a的属性
        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';
        $attributes .= ' class="menu-link ' . ( $depth > 0 ? 'sub-menu-link' : 'main-menu-link' ) . '"';

        //添加a的样式
        $item_output = sprintf( '%1$s<a%2$s>%3$s%4$s%5$s</a>%6$s',
            $args->before,
            $attributes,
            $args->link_before,
            apply_filters( 'the_title', $item->title, $item->ID ),
            $args->link_after,
            $args->after
        );
        //上面这个item_output我要说一下。这里写的有点死。
        //如果一级菜单是<a><span>我是菜单</span></a>
        //然而其他级菜单是<a><strong>我是菜单</strong></a>
        //这样的情况,$args->link_before是固定值就不行了,要自行判断
        //$link_before = $depth == 0 ? '<span>' : '<strong>';
        //$link_after = $depth == 0 ? '</span>' : '</strong>';
        //类似这个意思。
        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
}

在你需要哦的地方写上这个代码即可!
大致内容就是这些了,运用你高超的储备知识来编写你的主题吧!!!

版权声明

  • 1.本站文章基本属于原创,搬运者请标注来源地址
  • 2.部分文章转载需经过作者同意。
  • 3.网站资源来源于网络,仅供学习!
  • 4.待添加....
  • Wordpress主题Wordpress美化个人作品主题美化学习日志

    本站CorePress-Pro主题美化教程

    2023-4-5 13:19:25

    Wordpress主题个人作品日常牢骚站长个人

    【枫】主题开发进度

    2023-10-10 0:33:39

    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    有新私信 私信列表
    搜索
    歌曲封面