WooCommerce изменить порядок привилегий - PullRequest
0 голосов
/ 05 апреля 2019

Здравствуйте, я создал новую роль, используя Ultimate Member с именем stock_user я хочу, чтобы все пользователи в роли stock_user могли делать только то, что они могут изменить статус заказа на странице администратора wooCommerce с обработки на отправку только

я пробовал плагины, но ничего не получалось, извините, у меня нет кода, но я не знаю с чего начать

Может кто-нибудь сказать мне, где начать делать эту работу?

enter image description here я хочу ограничить параметры этого выпадающего меню обработкой и доставкой, только когда пользователь с привилегированным аккаунтом stock_user вошел в систему

РЕДАКТИРОВАТЬ 2: Теперь он работает должным образом благодаря IndexTwo Answer, но проблема в том, что роль инвентаря - это пользовательская роль, созданная плагином Ultimate Member. Как я могу заставить статус работать с ним? вот код Indextwo

    function vnm_remove_woo_statuses($statuses) {
    $currentUser = wp_get_current_user();

    $removeStatusesArray = array('pending', 'completed', 'cancelled', 'refunded', 'failed', 'refund-issued', 'shipping-progress', 'on-hold');

    //  If it's inventory user role

    if ( in_array('inventory', $currentUser->roles)) {

        foreach ($removeStatusesArray as $status) {
            if (isset($statuses['wc-' . $status])) {
                unset($statuses['wc-' . $status]);
            }
        }
    }

    return $statuses;
}

add_filter('wc_order_statuses', 'vnm_remove_woo_statuses');

Я имею в виду, что это работает, когда я просто меняю инвентарь на администратора, но как заставить его работать с пользовательской ролью (инвентарь)? спасибо

1 Ответ

1 голос
/ 05 апреля 2019

Есть несколько способов приблизиться к логике в этом, но вот функция сначала:

function vnm_remove_woo_statuses($statuses) {
    $currentUser = wp_get_current_user();

    $removeStatusesArray = array('pending', 'completed', 'cancelled', 'refunded', 'failed', 'refund-issued', 'shipping-progress', 'on-hold');

    //  If it's any role other than administrator, remove the status

    if (!in_array('administrator', $currentUser->roles)) {

        foreach ($removeStatusesArray as $status) {
            if (isset($statuses['wc-' . $status])) {
                unset($statuses['wc-' . $status]);
            }
        }
    }

    //  ALWAYS need to return the status array regardless

    return $statuses;
}

add_filter('wc_order_statuses', 'vnm_remove_woo_statuses', 5, 1);

Обратите внимание на последнюю строку функции: вам всегда нужно возвращать значение фильтра, независимо от логики в нем - иначе все пойдет не так. Я также установил высокий приоритет 5 на случай, если что-то еще будет подключено.

Условная логика в настоящее время настроена на удаление статусов, если ЛЮБАЯ роль, отличная от administrator, пыталась изменить ордер:

if (!in_array('administrator', $currentUser->roles)) { /* Do stuff */ }

В вашем примере вы удаляли статусы только для администраторов. Вы можете изменить это так, чтобы это происходило только для stock_user пользователей:

if (in_array('stock_user', $currentUser->roles)) { /* Do stuff */ }

... однако, имейте в виду, что если у вас есть возможность добавить несколько ролей для пользователя и добавить Stock User к администратору, их доступ к статусам ордеров также будет здесь ограничен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...