【发布时间】:2021-06-14 16:35:07
【问题描述】:
我想根据用户角色启用或禁用运输方式。 我已经测试了各种不同的代码和方法,到目前为止都没有奏效。
当前代码:(来源:stacklink)
add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_method_based_on_user_role', 30, 2 );
function hide_shipping_method_based_on_user_role( $rates, $package ) {
$shipping_id = 'shipmondo:3';
foreach( $rates as $rate_key => $rate ){
if( $rate->method_id === $shipping_id ){
if( current_user_can( 'b2b' ) || ! is_user_logged_in()){
unset($rates[$rate_key]);
break;
}
}
}
return $rates;
}
(也测试了原始的sn-p,没有更改,接受用户角色) 对我不起作用。我也用'local_pickup'对其进行了测试,它有时确实有效,但似乎对浏览器缓存和会话非常敏感。我还需要的是 3 个方法,它们以相同的名称调用,但用一个子编号分隔它们:shipmondo:3、shipmondo:4 等(在“值”下的浏览器检查中找到)还有一个叫做 ID 的东西,它看起来像:'shipping_method_0_shipmondo3' 不知道我是否可以使用它,但是当代码没有正确更新时,很难弄清楚。 sn-p 是 2018 年的,所以它可能是一个过时的东西,但我发现的较新的 sn-ps 基于相同的原则,看起来并没有太大的不同。
另外,为什么需要“||!is_user_logged_in()”?我只需要为批发用户禁用 3 种方法中的 2 种,不需要影响任何其他角色,也不需要影响客人。这几天一直在和这个作斗争。
另外,关于强制 Wordpress 和 Woocommerce 更新,而不是在缓存中游来游去的任何建议?
提前致谢。
【问题讨论】:
标签: php wordpress woocommerce user-roles shipping-method