2014-03-06 127 views
1

我試圖根據用戶角色顯示兩個不同的菜單。針對不同用戶角色的不同菜單

我已經建立了所謂的「客戶」使用下面的代碼(在functions.php中)的新角色:

add_role('client', 'Client', array(
    'read' => true, 
) 
); 

,我必須使用此代碼(在functions.php中)兩個不同的菜單:

function register_my_menus() { 
    register_nav_menus(
    array(
    'client-navigation' => __('Client Navigation'), 
    'staff-navigation' => __('Staff Navigation'), 

    ) 
); 
} 
add_action('init', 'register_my_menus'); 

這裏是我想用來調用任何客戶端導航或導航的工作人員(在header.php文件)的代碼:

<?php 
     if (current_user_can('client')){ 
      //menu for client role 
      wp_nav_menu(array('theme-location' => 'client-navigation')); 

     }else{ 
      //default menu 
      wp_nav_menu(array('theme-location' => 'staff-navigation')); 
     } 
?> 

我也嘗試在wp_nav_menu之前加上'echo'並將theme-location更改爲menu並使用菜單名稱,但它始終顯示staff-navigation菜單。

+0

你能解釋什麼不起作用嗎?你沒有看到菜單嗎?兩次相同的菜單?你有菜單項目添加到這兩個菜單?你是否以客戶身份登錄?我相信'current_user_can'接受一個不是角色的能力。 – Jrod

+0

不,它總是顯示員工導航菜單,我在每個菜單中有不同的鏈接,我使用兩個瀏覽器(1管理員登錄和1個客戶端登錄)來測試 – NickMcB

回答

2

要使用current_user_can,您應該添加自己的custom capability

沒有這樣做,因爲你要尋找的角色,下面的功能,適應from here這項工作:

function check_for_clients() { 
    global $current_user; 

    $user_roles = $current_user->roles; 
    $user_role = array_shift($user_roles); 

    return ($user_role == 'client'); 
} 

,然後在header.php文件(請注意,你有一個typo in theme_location) :

if (check_for_clients()){ 
    wp_nav_menu(array('theme_location' => 'client-navigation')); 

} else { 
    wp_nav_menu(array('theme_location' => 'staff-navigation')); 
} 
+0

謝謝b,這正確地檢查用戶現在是否是客戶端,但它是仍然爲客戶和工作人員加載相同的菜單。 – NickMcB

+0

尼克,這是你的代碼錯別字,看到更新的答案。 – brasofilo

+0

啊,非常感謝! – NickMcB

相關問題