2014-02-20 31 views
5

在WordPress中,當註冊管理頁面或自定義帖子類型時,我們可以指定menu_position。但是,如果兩個頁面共享相同的menu_position,則只會顯示其中的一個。在WordPress管理員註冊頁面時如何避免menu_position衝突?

如何在多插件/多開發環境(如WordPress)中避免這種衝突?如何檢查menu_position尚未被使用?

5100或甚至null的任何值都可能導致衝突。

+0

也許不是你想要的答案,但我只是不指定菜單位置在add_menu()或add_submenu()函數中。這樣它保證你的菜單會顯示出來。出現的菜單比完全沒有的菜單要好。 – Kyle

+0

@Kyle感謝您的評論,這也是我的想法,但正如我在問題中提到的,即使爲'menu_position'設置'null'值可能導致衝突。看到這裏例如:http://wordpress.org/support/topic/missing-menu_position-conflicts-with-other-plugins – Community

+0

我已經找到了[建議使用小數](http://gabrielharper.com/blog/ 2012/08/wordpress-admin-menu-positioning-conflicts /)(例如'25.2'的位置而不是'25')。然而,雖然這肯定會降低碰撞概率,但它不會完全避免衝突,因爲兩個插件仍然可以使用相同的小數位... – Community

回答

2

可能不是最好的解決方案,但要儘量減少風險嘗試使用小數定位:)而不是「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; 
} 

給你最接近的自由位置到一個你想要的....你可以閱讀更多關於它here

+3

感謝您的回答!從WordPress 3.8開始,使用小數與使用'false'或'null'相同,這不僅會忽略您期望的位置,而且還會導致衝突。關於你建議的功能(假設我們將'$ increment' var改爲1),我無法成功地使用'$ GLOBALS ['menu']'變量,也許我打電話太早了?不知道,但現在我剛結束了冒着我的插件干擾另一個...... :( – Community