Php 在WordPress admin中注册页面时如何避免菜单位置冲突?

Php 在WordPress admin中注册页面时如何避免菜单位置冲突?,php,wordpress,Php,Wordpress,在WordPress中,注册管理员页面或自定义帖子类型时,我们可以指定。但是,如果两个页面共享相同的菜单位置,则仅显示其中一个页面 如何在多插件/多开发环境(如WordPress)中避免此类冲突?如何检查菜单位置是否已被占用 从5到100甚至null的任何值都可能导致冲突。可能不是最好的解决方案,但为了最大限度地降低风险,尝试使用小数进行定位:)而不是“3”,尝试使用“3.1”、“3.2”、“3.3”等。另一种方法可能是使用类似于以下的函数: function get_free_menu_pos

在WordPress中,注册管理员页面或自定义帖子类型时,我们可以指定。但是,如果两个页面共享相同的菜单位置,则仅显示其中一个页面

如何在多插件/多开发环境(如WordPress)中避免此类冲突?如何检查菜单位置是否已被占用


5
100
甚至
null
的任何值都可能导致冲突。

可能不是最好的解决方案,但为了最大限度地降低风险,尝试使用小数进行定位:)而不是“3”,尝试使用“3.1”、“3.2”、“3.3”等。另一种方法可能是使用类似于以下的函数:

function get_free_menu_position($start, $increment = 0.3)
{
    foreach ($GLOBALS['menu'] as $key => $menu) {
        $menus_positions[] = $key;
    }

    if (!in_array($start, $menus_positions)) return $start;

    /* the position is already reserved find the closet one */
    while (in_array($start, $menus_positions)) {
        $start += $increment;
    }
    return $start;
}

为了给你最接近你想要的自由位置…你可以阅读更多关于它的内容

也许不是你想要的答案,但我不会在add_menu()或add_submenu()函数中指定菜单位置。这样可以保证你的菜单会显示出来。显示的菜单比完全不显示的菜单好。@Kyle感谢您的评论,这也是我的想法,但是正如我在问题中提到的,即使为
菜单位置设置
null
值也会导致冲突。例如,请参见此处:我找到了一个(例如,
25.2
的位置,而不仅仅是
25
)。然而,虽然这肯定会降低冲突概率,但它不会完全避免冲突,因为两个插件仍然可以使用相同的小数点位置……我有很多插件添加了菜单页,但它们都没有冲突。这一定是一个非常罕见的案例。我明白你的意思,你试图找到一个解决方案,使两个菜单项不可能相互覆盖。对我来说,当我开发时,我从来没有指定过那个参数,所以我的代码看起来像是添加菜单页面(“我的页面标题”、“我的页面”、“编辑别人的帖子”、“我的页面”slug)、“我的页面”函数、“插件”url(“myplugin/images/icon.png”)while(isset($GLOBALS['menu'][$menupos]))$menupos+=1以使用下一个可用位置。这可以作为一个解决方案发布,但我还没有测试它。谢谢你的回答!从WordPress 3.8开始,使用小数与使用
false
null
相同,这不仅会忽略所需的位置,还会导致冲突。关于您建议的函数(假设我们将
$increment
var更改为1),我无法成功使用
$GLOBALS['menu']
变量,也许我调用它太早了?不确定,但现在我只是冒着插件干扰另一个插件的风险…:(