显示 WordPress 后台主菜单和子菜单结构

VFX大学 wordpress开发 显示 WordPress 后台主菜单和子菜单结构

正在查看 0 条回复
  • 作者
    帖子
    • #392

      追光
      管理员

      详细讲解这两段代码的用途、作用,以及它们输出格式的意义和实用场景


      1. 显示 WordPress 后台主菜单和子菜单结构

      add_action('admin_menu', function() {
          global $menu, $submenu;
      
          echo '<pre style="background:#fff;color:#000;z-index:9999999;position:relative;">';
      
          echo "=== 主菜单(\$menu) ===\n";
          foreach ($menu as $item) {
              echo "菜单名: {$item[0]} | slug: {$item[2]}\n";
          }
      
          echo "\n=== 子菜单(\$submenu) ===\n";
          foreach ($submenu as $parent => $items) {
              echo "父菜单 slug: {$parent}\n";
              foreach ($items as $subitem) {
                  echo "  子菜单名: {$subitem[0]} | slug: {$subitem[2]}\n";
              }
          }
      
          echo '</pre>';
      });


      用途和作用

      • 目的:这个代码会在 WordPress 后台加载菜单时,将所有的**主菜单($menu)和子菜单($submenu)**信息打印输出出来,方便开发者查看当前所有的菜单结构。

      • $menu 是一个全局数组,包含 WordPress 后台左侧主菜单的所有菜单项。每个菜单项是一个数组,里面包含:

        • 菜单名称(第0位)

        • 访问权限要求

        • 菜单的slug(第2位,用于 URL 参数)

        • 其他项(图标,位置等)

      • $submenu 是一个关联数组,键为主菜单的 slug,值为该菜单下所有子菜单项的数组。每个子菜单项结构类似,也包含菜单名和 slug。

      • 打印信息帮助你快速知道:

        • 现有的菜单有哪些

        • 它们对应的 slug 是什么(slug 很重要,通常用来添加子菜单或权限判断)

        • 父子菜单的层级关系


      输出格式

      示例输出:

      === 主菜单($menu) ===
      菜单名: 仪表盘 | slug: index.php
      菜单名: 文章 | slug: edit.php
      菜单名: 媒体 | slug: upload.php
      
      === 子菜单($submenu) ===
      父菜单 slug: index.php
        子菜单名: 仪表盘首页 | slug: index.php
        子菜单名: 更新 | slug: update-core.php
      
      父菜单 slug: edit.php
        子菜单名: 所有文章 | slug: edit.php
        子菜单名: 新建文章 | slug: post-new.php


      适用场景

      • 插件或主题开发者想查看或调试后台菜单结构时,快速定位菜单 slug,便于增删改菜单。

      • 权限管理或条件判断:知道具体菜单 slug 方便基于它们做访问权限控制。

      • 后台定制:为特定菜单添加自定义子菜单,或隐藏某些菜单。


      2. 打印 WordPress 元盒(Meta Boxes)结构

      add_action('add_meta_boxes', function( $post_type ) {
          global $wp_meta_boxes;
          echo '<pre>';
          print_r( $wp_meta_boxes[$post_type] );
          echo '</pre>';
      }, 100);


      用途和作用

      • 目的:这段代码会在 WordPress 加载编辑页面时,输出当前 $post_type(文章类型)对应的所有 Meta Boxes(元盒) 的结构信息。

      • Meta Boxes 是 WordPress 编辑器页面中的小模块,比如发布按钮模块、分类选择模块、特色图片模块、标签模块等等。

      • $wp_meta_boxes 是一个全局数组,包含所有已注册的 Meta Box,按文章类型、显示位置、优先级等层级组织。

      • 通过打印 $wp_meta_boxes[$post_type],你能看到所有该文章类型(post, page, 自定义文章类型)的元盒详情,包括:

        • id:元盒唯一标识

        • title:元盒标题

        • callback:负责渲染这个盒子的函数

        • args:额外参数

        • 所属位置(side, normal, advanced)

        • 优先级(high, core, default)


      输出格式举例

      Array
      (
          [side] => Array
              (
                  [core] => Array
                      (
                          [submitdiv] => Array
                              (
                                  [id] => submitdiv
                                  [title] => 发布
                                  [callback] => post_submit_meta_box
                                  [args] => Array
                                      (
                                          [__back_compat_meta_box] => 1
                                      )
                              )
                          [formatdiv] => Array
                              (
                                  [id] => formatdiv
                                  [title] => 形式
                                  [callback] => post_format_meta_box
                                  [args] => Array()
                              )
                      )
              )
      )


      适用场景

      • 开发自定义编辑界面:了解和调试已有的元盒,知道它们的 id 和回调函数,方便你修改、替换或者扩展功能。

      • 移除、隐藏或重新排序元盒:比如你想隐藏“发布”按钮盒子,或者添加新的自定义元盒。

      • 调试自定义文章类型的编辑页面,确认哪些元盒被注册。


      总结

      代码作用

      适用场景

      价值

      打印后台菜单结构

      后台菜单调试、定制菜单或权限管理

      快速获取菜单slug及层级关系,方便定制菜单

      打印编辑页面元盒结构

      自定义编辑页面、调试元盒布局

      查看所有元盒详细信息,便于隐藏、修改或扩展


      提示

      • 这些打印输出代码最好只在开发环境或调试时使用,生产环境要关闭,否则会影响后台体验。

      • 可以用 error_log(print_r(…, true)) 或 WP-CLI 调试,避免直接输出页面干扰。

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。