好吧,在过去的几天里,我一直想把头发拉出来试图解决这个问题。
我在带有woocommerce的wordpress安装中有一个批发插件。它为用户提供了" wholesale_customer"特价超过其他人。我希望能够只向" wholesale_customer"提供本地送货服务。用户角色,但似乎无法弄清楚如何做到这一点。
我从@mcorkum那里得到了这段代码,但它仍然无效。
/**
* Add local delivery for wholesale customers
*/
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);
我知道这可以用插件实现,但我不想使用插件或为此付费。
有没有人看到我没有看到的任何内容?
答案 0 :(得分:2)
/**
* Add local delivery for wholesale customers
*/
function wholesale_local_delivery($available_methods) {
global $woocommerce;
global $current_user;
if ( isset( $available_methods['local_delivery'] ) ) {
if ( !current_user_can( 'wholesale_customer' ) ) {
unset( $available_methods['local_delivery'] );
}
}
return $available_methods;
}
add_filter( 'woocommerce_package_rates', 'wholesale_local_delivery', 10, 1);
通过在主题的functions.php文件中粘贴上述代码来尝试。如果这对您有用,请告诉我。
答案 1 :(得分:1)
我不是wordpress dev,但该代码看起来不像是为用户提供“wholesale_customer”“local_delivery”选项。事实上,如果用户角色是“wholesale_customer”,它看起来是删除本地传递选项:
if ( isset( $available_methods['local_delivery'] ) ) {
if ($user_role == 'wholesale_customer' ) {
unset( $available_methods['local_delivery'] );
}
}
如果我只是简单地将这些代码用于表面值(因为我不是wordpress dev),我会重新编写这个函数,以便更容易理解和阅读:
function wholesale_local_delivery($available_methods)
{
global $woocommerce;
global $current_user;
// Return early if no local delivery option is available
if (!isset($available_methods['local_delivery'])) {
return $available_methods;
}
// Determine if the user has a user role of wholesale customer
$hasRoleWholeSaleCustomer = false;
foreach ($current_user->roles as $role) {
if ($role === 'wholesale_customer') {
$hasRoleWholeSaleCustomer = true;
break;
}
}
// If the user does not have the role wholesale customer
// And for the code here to be being processed the local delivery
// option must be available
if (!$hasRoleWholeSaleCustomer) {
unset($available_methods['local_delivery']);
}
// Return the available methods applicable to the users roles
return $available_methods;
}
希望有其他有woocomerce经验的人能给出更好的答案。但与此同时,您可以尝试重新编写,看看它是否适合您。
古德勒克。