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

В настоящее время я работаю над созданием оптового варианта через woocommerce. У меня отключена оптовая инфраструктура, когда вы вошли в систему и имеете роль пользователя "wholesale_customer". Однако я в одном шаге от завершения, и я не могу понять это.

Я хочу предложить местную доставку для наших оптовых клиентов в городе и все; не клиенты или гостевые пользователи. В настоящее время у нас есть плагин usps, который предлагает доставку для клиентов и гостевых покупок.

Вот что у меня есть на данный момент, я чувствую, что я близок, просто упускаю несколько вещей. У кого-нибудь есть предложения?

function wholesale_local_delivery( $available_methods ) {
global $woocommerce;
if ( isset( $available_methods['local_delivery'] ) ) {
if (current_user_can('wholesale_customer')) {
unset( $available_methods['local_delivery'] );
}
}
return $available_methods;
}
add_filter( 'woocommerce_available_shipping_methods', 'wholesale_local_delivery' );

P.S. Я знаю, что могу приобрести плагин Woocommerce, но не хочу этого делать.


person Blake    schedule 26.06.2015    source источник


Ответы (1)


current_user_can не проверяет роль, он проверяет разрешения, которые, я думаю, вам не нужны. Попробуй это:

function wholesale_local_delivery($available_methods) {
    global $woocommerce;
    global $current_user;

    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);

    if ( isset( $available_methods['local_delivery'] ) ) {
        if ($user_role == 'wholesale_customer' ) {
            unset( $available_methods['local_delivery'] );
        }
    }
    return $available_methods;
}
add_filter( 'woocommerce_package_rates', 'wholesale_local_delivery', 10, 1);
person mcorkum    schedule 26.06.2015
comment
Еще ничего. Может быть, это вопрос приоритета? @мкоркум - person Blake; 26.06.2015
comment
О, я нашел кое-какую документацию. Я думаю, что вы можете использовать неправильный фильтр. Вместо этого попробуйте: woocommerce_package_rates. Также убедитесь, что вы очистили кэш WooCommerce. Посмотрите здесь: wordpress .org/support/topic/ или здесь: support.woothemes.com/hc/communities/public/questions/ — я обновил ответ. - person mcorkum; 26.06.2015
comment
Все еще не повезло :( Я не знаю, что случилось. - person Blake; 26.06.2015
comment
Из всего, что я вижу, похоже, что это правильный путь. Вы уверены, что роль пользователя совпадает? Сделайте print_r($current_user) где-нибудь в вашем шаблоне и убедитесь, что имя роли совпадает? - person mcorkum; 26.06.2015