WooCommerce后台仅为店铺管理员显示待审核产品并修复代码报错
错误原因及修复方案
你遇到的语法错误及原有代码问题如下:
- 第一个
if判断语句缺少闭合右括号),直接触发语法解析错误 - 角色判断逻辑错误:
$current_user->shop_manager不是用户对象的合法属性,判断用户角色需要读取$current_user->roles数组 author__in参数需要传入数组格式,直接传用户ID不符合参数要求- 原有逻辑没有实现仅展示pending状态商品、隐藏回收站的核心需求
修复后完整实现代码
将以下PHP代码添加到当前主题functions.php文件或自定义功能插件中即可:
function filter_shop_manager_products($query) { // 仅在后台商品列表的主查询场景生效 if (!is_admin() || !$query->is_main_query() || $query->get('post_type') !== 'product') { return $query; } $current_user = wp_get_current_user(); // 超级管理员不受限制,直接返回 if (in_array('administrator', $current_user->roles)) { return $query; } // 仅对店铺管理员角色做过滤 if (in_array('shop_manager', $current_user->roles)) { // 仅展示待审核状态商品,自动排除回收站、草稿、已发布等其他所有状态 $query->set('post_status', 'pending'); } return $query; } add_action('pre_get_posts', 'filter_shop_manager_products');
CSS优化建议
原有CSS可以保留用来隐藏多余的筛选按钮和操作项,调整为更规范的写法避免样式被覆盖:
.current, .draft, .publish, .search-box, .byorder, .tablenav.top, .page-title-action { display: none !important; }
验证说明
替换代码后切换shop_manager角色账号登录后台即可看到效果,超级管理员账号不受任何过滤限制,可正常查看所有状态的商品。
内容的提问来源于stack exchange,提问作者thedream fullile
相关产品推荐
相关产品推荐

