2017-03-07 163 views
0

我已經爲客戶完成了woocommerce網站。根據客戶的要求,我得到了一個問題。我的客戶希望他們的代理商只需要能夠搜索訂單,但他們不應該編輯任何訂單,或者他們不應該看到任何其他選項。代理商應該看到所有的訂單詳情,如電話號碼,電子郵件和完整的帳單地址,但他們不應該編輯任何內容。只允許用戶只讀訪問woocommerce

我已經嘗試了幾個用戶角色編輯器,他們都沒有給出該選項。 注意:所有訂單僅限客人訂單!

請讓我知道,如果你有任何想法如何實現這一點。

+0

你創建一個自定義角色?您可以定義一個角色,允許用戶使用'read_shop_order'而不是'edit_shop_order'。請參閱[此安裝功能](https://github.com/woocommerce/woocommerce/blob/70d46fe008fd722561855a76b6a605188569d231/includes/class-wc-install.php#L716) – helgatheviking

+0

我會嘗試這一個,但很少有更多的建議,非常歡迎! –

+0

這只是一個WooCommerce源代碼的鏈接,它顯示了WooCommerce特定的角色功能。你可能會複製'shop_manager'角色並刪除編輯功能。 – helgatheviking

回答

0

在你的主題的functions.php試試這個

//mydomain.com/my-account/view-order/xxxx - 這裏的任何訂單號

function my_customer_has_capability($allcaps, $caps, $args) { 

    if (isset($caps[0])) { 
     switch ($caps[0]) { 
      case 'view_order' : 
       $user_id = $args[1]; 
       $order = wc_get_order($args[2]); 

       if ($order && $user_id == $order->user_id || my_get_current_user_role() == 'editor') { 
        $allcaps['view_order'] = true; 
       } 
      break; 
     } 
    } 
    return $allcaps; 
} 
add_filter('user_has_cap', 'my_customer_has_capability', 10, 3); 

function my_get_current_user_role() { 
    $current_user = wp_get_current_user(); 
    if (!($current_user instanceof WP_User)) 
     return; 

    if(empty($current_user->roles[0])) 
     return false; 

    $role = ($current_user->roles[0]); 
    return (string)$role; 
} 
+0

對不起它不工作。它被給404未找到頁面。 –

+0

其實我最關心的是我們需要代理人應該能夠看到賬單細節,包括電話號碼,但不應該能夠訪問它們。我試過woocommerce休息api,但它似乎不會爲我工作,因爲所有的訂單都是客人訂購。 –