立即注册 找回密码

QQ登录

只需一步,快速开始

查看: 215|回复: 0

[Wordpress 通用教程] WordPress简单输出菜单/子菜单的内容列表的方法

[复制链接]
发表于 2024-8-7 19:55:07 | 显示全部楼层 |阅读模式
道勤网-数据www.daoqin.net

亲注册登录道勤网-可以查看更多帖子内容哦!(包涵精彩图片、文字详情等)请您及时注册登录-www.daoqin.net

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在定制网站的时候,高效利用菜单可以节约很多开发时间。比如要输出一系列的相关页面,我们可以新建一个菜单,把这些页面都放到菜单里,然后用“wp_nav_menu”方法输出这些菜单项,比如这样。

  1. wp_nav_menu( array(
  2.         'theme_location' => 'menu-top'
  3. ) );
复制代码
wp_nav_menu是一个已经高度封装的输出函数,你可以通过注入参数自定义各种标签和样式,具体可以查看官方文档(https://developer.wordpress.org/reference/functions/wp_nav_menu/),本文就不赘述了。但有一个问题它没有办法解决,也就是只输出特定的子菜单项,而不是整个菜单的菜单树。
假如我通过wp_nav_menu方法可以输出以下这个菜单,我需要在某些地方只输出圈出的这块子菜单,有什么方法可以做到吗?
01.jpg
自然是有的,我们可以借助wp_get_nav_menu_items这个封装读没有wp_nav_menu那么高的函数来解决。直接上代码:
  1. $parent_item_id = 888; //change this id by your needs
  2. $menu_items = wp_get_nav_menu_items( $navigation_attributes['menu_id'] );
  3. $menu_html = '';
  4. for ( $x = 0; $x < count( $menu_items ); $x++ ) {
  5.         $menu_item_parent = $menu_items[ $x ]->menu_item_parent;
  6.         if( $menu_item_parent == $parent_item_id ){
  7.                 $url = $menu_items[ $x ]->url;
  8.                 $title = $menu_items[ $x ]->title;
  9.                 $menu_html .= '<li><a href="' .esc_attr( esc_url( $url ) ). '">' .wp_kses_post( $title ).'</a></li>';
  10.         }
  11. }
  12. echo $menu_html;
复制代码
修改第一行的$parent_item_id 即可输出对应子菜单项了。$parent_item_id是一个数字,可以在菜单设置界面的控制台里找到:
022.jpg
接下来我们再加工一下功能,要知道wp_nav_menu是可以标记当前页面的,它会给当前页的项加一个”current_page_item”样式,我们可以利用这个样式对当前页做一些高亮显示等交互处理。我希望在调用子菜单的时候也能有类似功能。并且我们也要封装一个短代吗以便在后台编辑器中随时实用,下面是完整代码:
  1. //Out put submenu items in certain menu - https://blog.brain1981.com
  2. //load navigation shortcode
  3. add_shortcode( 'brain1981_custom_navigation', 'brain1981_add_custom_navigation' );
  4. //create shortcode for navigation
  5. function brain1981_add_custom_navigation( $attributes, $content = null ) {
  6.         $navigation_attributes = shortcode_atts( array(
  7.                 'menu_id' => '',
  8.                 'parent_item_id' => '',
  9.         ), $attributes );
  10.         $menu_items = wp_get_nav_menu_items( $navigation_attributes['menu_id'] );
  11.         $menu_html = '';
  12.         $current_page_url = get_permalink( get_queried_object_id() );

  13.         for ( $x = 0; $x < count( $menu_items ); $x++ ) {
  14.                 $menu_item_parent = $menu_items[ $x ]->menu_item_parent;
  15.                 if( $menu_item_parent == $navigation_attributes['parent_item_id'] ){
  16.                         $url = $menu_items[ $x ]->url;
  17.                         $is_current = '';
  18.                         if( $current_page_url == $url) $is_current = 'current';
  19.                         $title = $menu_items[ $x ]->title;
  20.                         $item_id = $menu_items[ $x ]->post_slug;
  21.                         $menu_html .= '<li class="'.$is_current.'"><a href="' .esc_attr( esc_url( $url ) ). '">' .wp_kses_post( $title ).'</a></li>';
  22.                 }
  23.         }
  24.         return '<u>'.$menu_html.'</ul>';
  25. }
复制代码
以上代码中,参数menu_id即菜单ID,parent_item_id即上面提到的子菜单ID,输出的菜单项如果是当前页面,会自动生成“current”的样式。自此,使用如下短代吗即可随时调用指定的子菜单
[brain1981_custom_navigation menu_id=123 parent_item_id=60]
这样就可以了

道勤主机提供365天*24小时全年全天无休、实时在线、零等待的售后技术支持。竭力为您免费处理您在使用道勤主机过程中所遇到的一切问题! 如果您是道勤主机用户,那么您可以通过QQ【792472177】、售后QQ【59133755】、旺旺【诠释意念】、微信:q792472177免费电话、后台提交工单这些方式联系道勤主机客服! 如果您不是我们的客户也没问题,点击页面最右边的企业QQ在线咨询图标联系我们并购买后,我们为您免费进行无缝搬家服务,让您享受网站零访问延迟的迁移到道勤主机的服务!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

道勤网- 推荐内容!上一条 /2 下一条

!jz_fbzt! !jz_sgzt! !jz_xgzt! 快速回复 !jz_fhlb! !jz_lxwm! !jz_gfqqq!

关于我们|手机版|小黑屋|地图|【道勤网】-www.daoqin.net 软件视频自学教程|免费教程|自学电脑|3D教程|平面教程|影视动画教程|办公教程|机械设计教程|网站设计教程【道勤网】 ( 皖ICP备15000319号-1 )

GMT+8, 2024-9-15 05:59

Powered by DaoQin! X3.4 © 2016-2063 Dao Qin & 道勤科技

快速回复 返回顶部 返回列表