我正在开发一个门户网站(这是概念验证),允许商店经理在审核订单时批准或拒绝订单。为了批准订单,商店经理添加采购订单编号并更新订单。这在后端起作用。
我遇到的困难是让商店经理通过前端查看所有订单。我使用的代码如下:
// Display all orders for shop managers on the front-end
add_filter('woocommerce_my_account_my_orders_query', 'show_all_orders_for_shop_manager', 10, 2);
function show_all_orders_for_shop_manager($args, $current_user) {
if (current_user_can('shop_manager')) {
$args['customer'] = '';
}
return $args;
}
每次我尝试使用订单屏幕时,都会看到订单屏幕的缩小版本,其中内容重叠,缺少一些 CSS,并且显示消息“此网站上出现严重错误。了解有关 WordPress 故障排除的更多信息。”
我知道这是可以做到的——我在其他地方见过类似的东西(我一辈子都不记得在哪里)。我还能够仅使用客户角色进行测试,但这仅限于您的订单,而不是每个订单。
woocommerce_my_account_my_orders_query
仅具有 $args
作为可用参数,但没有 $current_user
。
请注意,要专门针对用户角色,您不应使用针对用户功能而设计的 WordPress
current_user_can()
,而应使用 WooCommerce wc_current_user_has_role()
条件函数。
最后,您最好使用 PHP
unset()
来删除 'customer' 参数。
因此请尝试以下替换代码:
add_filter( 'woocommerce_my_account_my_orders_query', 'show_all_orders_to_shop_manager_role', 20 );
function show_all_orders_to_shop_manager_role( $args ) {
if ( wc_current_user_has_role('shop_manager') && isset($args['customer']) ) {
unset($args['customer']);
}
return $args;
}
代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。
请注意,商店经理将无法查看属于其他客户的订单,因为 WooCommerce 不允许。