1 回答

TA貢獻1770條經(jīng)驗 獲得超3個贊
我認(rèn)為有更多方法可以實現(xiàn)您的目標(biāo)。這將是一個解決方案:
用戶角色的運送方式
您可以使用用戶權(quán)限解決此問題。只有“管理員”角色的用戶才能使用“usps”送貨方式。
簡單的方法是使用免費插件,例如:
https://wordpress.org/plugins/user-role-editor/
在此插件中,您可以選擇您的用戶角色并單擊“添加功能”,希望能找到您的送貨方式。
還有完全適合您的問題的解決方案:
https://wordpress.org/plugins/user-role-based-shipping-method/ 還有很多插件不是免費的,但可能會提供更多的便利和支持。
更難的方法是編寫一個函數(shù)并使用 woocommerce 和 wordpress 鉤子和過濾器。這有點復(fù)雜,但我會給你一些開始的東西。
在 wordpress 中,用戶角色是一組能力。
您可以像這樣在 wordpress 中獲取角色對象:
$administrator_role = get_role( 'administrator' );
您可以添加功能并刪除它們:
$administrator_role->add_cap( 'custom_capability' );
$administrator_role->remove_cap( 'custom_capability' );
在此處閱讀相關(guān)內(nèi)容:https ://developer.wordpress.org/plugins/users/roles-and-capabilities/
幸運的是,有一個 woocommerce 過濾器可供使用。 也許你應(yīng)該先看看這個,這可能會完全解決你的問題:
https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/
如您所見,您想要的過濾器是:
add_filter('woocommerce_package_rates', 'your_function', 30, 2);
http://hookr.io/filters/woocommerce_package_rates/
這是一個教程,如何使用它:
https://trackitweb.com/woocommerce-hide-a-shipping-method-based-on-user-role/
示例中的送貨方式稱為“本地取件”:
add_filter('woocommerce_package_rates', 'hide_local_pickup_based_on_user_role', 30, 2);
function hide_local_pickup_based_on_user_role($rates, $package) {
foreach($rates as $rate_key => $rate){
if($rate->method_id === 'local_pickup'){
if(!current_user_can('local_pickup_allowed') || !is_user_logged_in()){
unset($rates[$rate_key]);
break;
}
}
}
return $rates;
這是您檢查角色能力(和登錄)的部分,用于為沒有此能力的用戶取消運輸方式:
if(!current_user_can('local_pickup_allowed') || !is_user_logged_in()){ ... }
我希望這可以幫助你!
- 1 回答
- 0 關(guān)注
- 152 瀏覽
添加回答
舉報