在我的主要的wp導覽列中,我有一個名為'Research'的選單項,我只想在WordPress中的研究人員中顯示。
研究人員將由一個名為wpum_relationship_to_lib
的使用者元資料欄位定義,它是一個包含研究人員、學生、員工等選項的多重選擇欄位。
重要的是researcher
必須是使用者選擇存取該選單的選項之一,且wpum_relationship_to_lib
不定義WordPress角色。
所有選單都是主要選單。此外,我需要在登入之前隱藏選單。請參閱我的程式碼,該程式碼未正確限制選單。
function restrict_menu_to_researchers($items, $args) { // 检查菜单是否分配给所需位置 if ($args->theme_location === 'primary') { // 检查用户是否已登录 if (is_user_logged_in()) { $user_id = get_current_user_id(); $relationship_values = get_user_meta($user_id, 'wpum_relationship_to_lib', true); // 检查用户是否为“researcher” if (is_array($relationship_values) && in_array('researcher', $relationship_values)) { // 允许研究人员访问菜单 return $items; } else { foreach ($items as $key => $item) { if ($item->title == 'Research') { // 隐藏非研究人员的“Research”菜单 unset($items[$key]); } } } } else { foreach ($items as $key => $item) { if ($item->title == 'Research') { // 隐藏未登录用户的“Research”菜单 unset($items[$key]); } } } } return $items; } add_filter('wp_nav_menu_objects', 'restrict_menu_to_researchers', 10, 2);
P粉5786806752023-09-08 13:32:38
提供的程式碼大部分是正確的。然而,在檢查使用者關係值時的條件語句中存在一個小問題。我更新了程式碼,確保只有在wpum_relationship_to_lib元欄位中選擇「researcher」作為其關係值之一的使用者才會顯示「Research」選單項目。它還會隱藏非登入使用者的「Research」選單。我沒有測試過程式碼,所以歡迎任何評論。 #joshmoto的程式碼是有效的,但在foreach循環中,條件!in_array($menu_object->title, $relationship_array)檢查選單物件標題是否不在關係陣列中。從問題中我所理解的,你想要檢查值「researcher」是否在關係數組中。因此,你應該更新條件為in_array('researcher', $relationship_array)。
function restrict_menu_to_researchers($items, $args) { // 检查菜单是否分配给所需位置 if ($args->theme_location === 'primary') { // 检查用户是否已登录 if (is_user_logged_in()) { $user_id = get_current_user_id(); $relationship_values = get_user_meta($user_id, 'wpum_relationship_to_lib', true); // 检查用户是否选择了“researcher”作为其关系值之一 if (is_array($relationship_values) && in_array('researcher', $relationship_values, true)) { // 允许研究人员使用菜单 return $items; } else { // 隐藏非研究人员的“Research”菜单 foreach ($items as $key => $item) { if ($item->title === 'Research') { unset($items[$key]); } } } } else { // 隐藏非登录用户的“Research”菜单 foreach ($items as $key => $item) { if ($item->title === 'Research') { unset($items[$key]); } } } } return $items; } add_filter('wp_nav_menu_objects', 'restrict_menu_to_researchers', 10, 2);
P粉7998853112023-09-08 13:31:29
我得到了答案。有趣的是它是区分大小写的。我只需要使用以下代码。但是在测试平台上,没有这行代码也可以运行。我甚至不知道这可能是为了小写字母:
(is_array($relationship_values) && in_array('researcher', array_map('strtolower', $relationship_values))) { ...
感谢大家的帮助和时间。–