在WordPress中,當註冊管理頁面或自定義帖子類型時,我們可以指定menu_position
。但是,如果兩個頁面共享相同的menu_position,則只會顯示其中的一個。在WordPress管理員註冊頁面時如何避免menu_position衝突?
如何在多插件/多開發環境(如WordPress)中避免這種衝突?如何檢查menu_position尚未被使用?
從5
到100
或甚至null
的任何值都可能導致衝突。
在WordPress中,當註冊管理頁面或自定義帖子類型時,我們可以指定menu_position
。但是,如果兩個頁面共享相同的menu_position,則只會顯示其中的一個。在WordPress管理員註冊頁面時如何避免menu_position衝突?
如何在多插件/多開發環境(如WordPress)中避免這種衝突?如何檢查menu_position尚未被使用?
從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;
}
給你最接近的自由位置到一個你想要的....你可以閱讀更多關於它here
感謝您的回答!從WordPress 3.8開始,使用小數與使用'false'或'null'相同,這不僅會忽略您期望的位置,而且還會導致衝突。關於你建議的功能(假設我們將'$ increment' var改爲1),我無法成功地使用'$ GLOBALS ['menu']'變量,也許我打電話太早了?不知道,但現在我剛結束了冒着我的插件干擾另一個...... :( – Community
也許不是你想要的答案,但我只是不指定菜單位置在add_menu()或add_submenu()函數中。這樣它保證你的菜單會顯示出來。出現的菜單比完全沒有的菜單要好。 – Kyle
@Kyle感謝您的評論,這也是我的想法,但正如我在問題中提到的,即使爲'menu_position'設置'null'值可能導致衝突。看到這裏例如:http://wordpress.org/support/topic/missing-menu_position-conflicts-with-other-plugins – Community
我已經找到了[建議使用小數](http://gabrielharper.com/blog/ 2012/08/wordpress-admin-menu-positioning-conflicts /)(例如'25.2'的位置而不是'25')。然而,雖然這肯定會降低碰撞概率,但它不會完全避免衝突,因爲兩個插件仍然可以使用相同的小數位... – Community