在woocommerce中,我使用“未交货”复选框将我的产品置于未交货状态。 既然一切都在补货上,我想对普通客户禁用补货(而对其他用户角色,例如Wholesale_customer)。
我有以下代码,但是当我将其添加为插件时,无法向购物车中添加某些东西(我可以按“添加到购物车”按钮,但购物车保持空白):
/*Single product page: out of stock when product stock quantitiy is lower or equal to zero AND customer is not wholesale_customer.*/
add_filter('woocommerce_product_is_in_stock', 'woocommerce_product_is_in_stock' );
function woocommerce_product_is_in_stock( $is_in_stock ) {
global $product;
$user = wp_get_current_user();
$haystack= (array) $user->roles;
$target=array('wholesale_customer');
if($product->get_stock_quantity() <= 0 && count(array_intersect($haystack, $target)) == 0){
$is_in_stock = false;
}
return $is_in_stock;
}
/*Single product page: max add to cart is the product's stock quantity when customer is not wholesale_customer.*/
function woocommerce_quantity_input_max_callback( $max, $product ) {
$user = wp_get_current_user();
$haystack= (array) $user->roles;
$target=array('wholesale_customer');
if(count(array_intersect($haystack, $target)) == 0){
$max= $product->get_stock_quantity();
}
return $max;
}
add_filter( 'woocommerce_quantity_input_max', 'woocommerce_quantity_input_max_callback',10,2);
答案 0 :(得分:0)
尝试改用woocommerce_is_purchasable( $is_purchasable, $product )
过滤器。它应该返回true或false。
此外,您也无需花太多时间来获得用户的角色。一个简单的if ( current_user_can( 'wholesale_customer' ) )
就足够了。
所以,像这样:
function my_is_purchasable( $is_purchasable, $product ) {
if ( current_user_can( 'wholesale_customer' ) ) {
return true;
} elseif ( $product->get_stock_quantity() <= 0 ) {
return false;
} else {
return $is_purchasable;
}
}
add_filter( 'woocommerce_is_purchasable', 'my_is_purchasable', 10, 2 );
注意:这只是为了演示,因为我现在不在办公桌前,无法为您正确测试。
答案 1 :(得分:0)
使用专用的woocommerce_product_backorders_allowed
过滤器挂钩尝试以下代码:
add_filter( 'woocommerce_product_backorders_allowed', 'products_backorders_allowed', 10, 3 );
function products_backorders_allowed( $backorder_allowed, $product_id, $product ){
$user = wp_get_current_user();
$user_roles = (array) $user->roles;
if( in_array( 'customer', $user_roles ) && ! in_array( 'wholesale_customer', $user_roles ) ){
$backorder_allowed = false;
}
return $backorder_allowed;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。应该可以。