限制用户角色仅更改Woocommerce中的某些订单状态[关闭]

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

我想通过woocommerce中的下拉列表将角色访问权限限制为某些订单状态。我已经尝试在functions.php子主题Restrict woocommerce order status by role上的代码,但无法让它工作,并没有足够的代表发表评论。

https://prnt.sc/mpfl3b是显示内容的屏幕截图 - 我希望商店经理(或创建自定义角色)只能将订单标记为处理或暂停,而下拉列表中没有其他选项可见。

任何建议将被认真考虑。

php wordpress woocommerce hook-woocommerce orders
1个回答
0
投票

链接的答案代码不适用于您想要的内容。而是尝试以下方法:

// Admin orders list: bulk order status change dropdown
add_filter( 'bulk_actions-edit-shop_order', 'filter_dropdown_bulk_actions_shop_order', 20, 1 );
function filter_dropdown_bulk_actions_shop_order( $actions ) {
    $new_actions = [];
    foreach( $actions as $key => $option ){
        // Targeting "shop_manager" | order statuses "on-hold" and "processing"
        if( current_user_can('shop_manager') && in_array( $key, array('mark_on-hold', 'mark_processing') ) ){
            $new_actions[$key] = $option;
        }
    }
    if( sizeof($new_actions) > 0 ) {
        return $new_actions;
    }
    return $actions;
}

// Admin order pages: Order status change dropdown
add_filter('wc_order_statuses', 'filter_order_statuses');
function filter_order_statuses($order_statuses) {
    global $pagenow;

    if( $pagenow === 'post.php' || $pagenow === 'post-new.php' ) {
        $new_order_statuses = array();

        foreach ($order_statuses as $key => $option ) {
            // Targeting "shop_manager" | order statuses "on-hold" and "processing"
            if( current_user_can('shop_manager') && in_array( $key, array('wc-on-hold', 'wc-processing') ) ){
                $new_order_statuses[$key] = $option;
            }
        }
        if( sizeof($new_order_statuses) > 0 ) {
            return $new_order_statuses;
        }
    }
    return $order_statuses;
}

代码位于活动子主题(或活动主题)的function.php文件中。它应该有效。

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