Php 如果某个用户角色已登录,则启用本地传递

Php 如果某个用户角色已登录,则启用本地传递,php,wordpress,woocommerce,woothemes,Php,Wordpress,Woocommerce,Woothemes,我目前正在通过woocommerce创建批发选项。当您登录并具有用户角色“批发客户”时,我已关闭批发基础设施。然而,我离完成还有一步,我想不出来 我想为我们镇上的批发客户提供本地送货服务,仅此而已;不是客户或来宾用户。目前,我们有一个usps插件,可以为客户和客人提供送货服务 这是我目前所拥有的,我觉得我很接近,只是错过了一些东西。有人有什么建议吗 function wholesale_local_delivery( $available_methods ) { global $woocomme

我目前正在通过woocommerce创建批发选项。当您登录并具有用户角色“批发客户”时,我已关闭批发基础设施。然而,我离完成还有一步,我想不出来

我想为我们镇上的批发客户提供本地送货服务,仅此而已;不是客户或来宾用户。目前,我们有一个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' );

另外,我知道我可以购买Woocommerce插件,但我不想这样做。

当前用户可以不检查角色,而是检查权限,我认为这不是你想要的。试试这个:

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);

还是没什么。也许这是一个优先考虑的问题@我找到了一些文档。我认为您可能使用了错误的过滤器-请尝试:woocommerce\u package\u rates。还要确保清除缓存。看看这里:或者这里:-我已经更新了答案。仍然不走运:(我不知道怎么回事。从我所看到的一切来看,这似乎是正确的方法。你确定用户角色匹配吗?在模板中的某个地方打印($current\u user)并确保角色名称匹配吗?