如何在 Woocommerce 前端向商店经理显示所有订单?

问题描述 投票:0回答:1

我正在开发一个门户网站(这是概念验证),允许商店经理在审核订单时批准或拒绝订单。为了批准订单,商店经理添加采购订单编号并更新订单。这在后端起作用。

我遇到的困难是让商店经理通过前端查看所有订单。我使用的代码如下:

// 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 故障排除的更多信息。”

我知道这是可以做到的——我在其他地方见过类似的东西(我一辈子都不记得在哪里)。我还能够仅使用客户角色进行测试,但这仅限于您的订单,而不是每个订单。

php woocommerce orders account user-roles
1个回答
0
投票

过滤器挂钩

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 不允许。

© www.soinside.com 2019 - 2024. All rights reserved.