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');
程式碼解釋

這個程式碼提供了多層面的權限控制:

  1. 阻止編輯非自己的商品
  2. 隱藏非自己商品的編輯連結(前台和管理列)
  3. 限制商店經理只能看到自己的商品列表

 

2025-03-05-15h29-31

 

後台介面

管理者看到的商品 數量

2025-03-05-15h35-20


商店經理看到的數量 雖然有系統有四筆,但只能看到自己建立的那一筆資料。

2025-03-05-15h35-09

 

前台介面

前往到自己的商品上時,是可以看到管理列編輯連結 「編輯商品」這個按鈕,可以直接快速前往後台編輯商品。

2025-03-05-15h34-05


如果不是自己的商品時,上面管理列編輯連結就會消失。

2025-03-05-15h33-50

 

注意事項

管理員角色不會受到影響,因為程式碼中檢查了角色並保留了管理員的完整權限。

豬油先生

大家好!我是豬油先生 ~ 我喜歡吃,吃是享受,是生活,因它的美,我記錄,偶爾寫點小教學。 我享受我的生活,並分享它存在的價值。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


返回頂部按鈕