如何在特定页面/单篇文章中控制侧边栏nav_menu小部件显示?
实现侧边栏小部件按页面/文章类型精准显示
需求回顾
- 5个指定页面仅显示
nav_menu-1 - 另外6个指定页面仅显示
nav_menu-2 - 所有单篇文章(single-posts)仅显示
nav_menu-3
修改后的完整代码
add_filter( 'widget_display_callback', 'widget_display_2', 50, 3 ); function widget_display_2( $instance, $widget, $args ){ // 定义仅显示nav_menu-1的页面ID数组,请替换为你的实际页面ID $show_menu1_pages = array(1, 2, 3, 4, 5); // 定义仅显示nav_menu-2的页面ID数组,请替换为你的实际页面ID $show_menu2_pages = array(6, 7, 8, 9, 10, 11); // 单篇文章页面逻辑:只保留nav_menu-3,隐藏另外两个菜单 if ( is_single() ) { if ( $widget->id == 'nav_menu-1' || $widget->id == 'nav_menu-2' ) { return false; } return $instance; } // 指定页面仅显示nav_menu-1:隐藏nav_menu-2和nav_menu-3 if ( is_page($show_menu1_pages) ) { if ( $widget->id == 'nav_menu-2' || $widget->id == 'nav_menu-3' ) { return false; } return $instance; } // 指定页面仅显示nav_menu-2:隐藏nav_menu-1和nav_menu-3 if ( is_page($show_menu2_pages) ) { if ( $widget->id == 'nav_menu-1' || $widget->id == 'nav_menu-3' ) { return false; } return $instance; } // 其他页面/场景:默认保留原小部件显示逻辑 return $instance; }
关键说明
- 页面ID替换:你需要把数组里的数字换成实际的页面ID——在WordPress后台编辑页面时,地址栏里的
post=xxx中的xxx就是页面ID。 - 逻辑分层:代码按「文章页→指定菜单1页面→指定菜单2页面」的顺序判断,确保每个场景的优先级清晰,不会冲突。
- 小部件控制:通过
return false直接隐藏不需要的小部件,return $instance保留需要显示的小部件,逻辑直观易懂。
内容的提问来源于stack exchange,提问作者user10165750
相关产品推荐
相关产品推荐

