WooCommerceWordpress密技
WooCommerce 商品權限管理終極教學:精準控制商店經理(Shop Manager)只能看到自己的商品

大家好,我是豬油先生!
情境
在 WooCommerce 中,預設的權限管理並不支持商店經理(Shop Manager)之間彼此看不到或無法編輯對方上架商品的功能,而管理員(Administrator)預設可以查看所有商品。那如果要實現商店經理之間互相不可見的需求,需要調整使用者角色權限來限制商品的可見性和編輯權限,該怎麼辦呢?
以下是具體的使用程式碼實現方法:
程式代碼
WooCommerce 的商店經理預設可以看到並編輯所有商品。要讓他們只能看到自己上架的商品,將以下程式碼加入到主題的 functions.php 文件中(建議使用子主題,以避免主題更新時覆蓋):
請注意 !!! 如果你的 functions.php 裡面本來就有資料 切記!!!
<?php
不要重複囉唷! 不然無法存檔。
<?php // 阻止商店經理編輯非自己的商品 function restrict_shop_manager_product_editing($allcaps, $cap, $args) { // 檢查是否為編輯商品的操作 if (isset($args[0]) && $args[1] && $cap[0] === 'edit_post') { $current_user = wp_get_current_user(); // 只針對商店經理角色 if (in_array('shop_manager', $current_user->roles)) { $post = get_post($args[1]); // 如果商品不是自己的,禁止編輯 if ($post && $post->post_author != $current_user->ID) { $allcaps[$cap[0]] = false; } } } return $allcaps; } add_filter('user_has_cap', 'restrict_shop_manager_product_editing', 10, 3); // 移除非自己商品的編輯連結 function hide_edit_links_for_shop_managers() { $current_user = wp_get_current_user(); // 只針對商店經理 if (in_array('shop_manager', $current_user->roles)) { $post = get_post(); // 如果商品不是自己的,移除編輯連結 if ($post && get_post_type($post) === 'product' && $post->post_author != $current_user->ID) { // 移除前台編輯連結 add_filter('edit_post_link', '__return_false'); // 移除管理列編輯連結 add_action('wp_before_admin_bar_render', function() { global $wp_admin_bar; $wp_admin_bar->remove_node('edit'); }); } } } add_action('wp', 'hide_edit_links_for_shop_managers'); // 限制商店經理只能看到自己的商品 function restrict_shop_manager_product_query($query) { $current_user = wp_get_current_user(); // 只在管理後台且是商品查詢時生效 if (is_admin() && $query->is_main_query() && $query->get('post_type') === 'product') { if (in_array('shop_manager', $current_user->roles)) { $query->set('author', $current_user->ID); } } return $query; } add_filter('pre_get_posts', 'restrict_shop_manager_product_query');
程式碼解釋
這個程式碼提供了多層面的權限控制:
- 阻止編輯非自己的商品
- 隱藏非自己商品的編輯連結(前台和管理列)
- 限制商店經理只能看到自己的商品列表
後台介面
管理者看到的商品 數量
商店經理看到的數量 雖然有系統有四筆,但只能看到自己建立的那一筆資料。
前台介面
前往到自己的商品上時,是可以看到管理列編輯連結 「編輯商品」這個按鈕,可以直接快速前往後台編輯商品。
如果不是自己的商品時,上面管理列編輯連結就會消失。
注意事項
管理員角色不會受到影響,因為程式碼中檢查了角色並保留了管理員的完整權限。