我在产品类别中没有看到任何用于调整库存数量或状态的过滤器……可能因为这种方式违背了库存管理的目的。
所以我们可以做两件事中的一件。(我认为我们不需要两者,但谁知道呢。)无论如何,首先我们可以添加一些自定义验证以防止该项目被添加到购物车中。
/*
* Validate when adding to cart
* @param bool $passed
* @param int $product_id
* @param int $quantity
* @return bool
*/
function so_12959338_add_to_cart_validation( $passed, $product_id, $qty ){
if( 'yes' == get_post_meta( $product_id, '_cmb_test_checkbox', true ) ){
$product = wc_get_product( $product_id );
wc_add_notice( sprintf( __( '%s cannot be added to the cart because of reasons.', 'my-plugin-textdomain' ), $product->get_title() ), 'error' );
return false;
}
return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'so_12959338_add_to_cart_validation', 10, 3 );
或者我们可以通过使产品不可购买来阻止它被添加到购物车并阻止添加到购物车按钮甚至显示。
现在在我的两个代码块中,我不确定您使用复选框保存了什么值。WooCommerce 对布尔值使用“是”和“否”,这就是我的代码所代表的。根据需要进行调整。
/*
* Make the item non-purchasable
* @param bool $purchasable
* @param obj $product
* @return bool
*/
function so_12959338_is_purchasable( $purchasable, $product ){
if( 'yes' == get_post_meta( $product->id, '_cmb_test_checkbox', true ) ){
$purchasable = false;
}
return $purchasable;
}
add_filter( 'woocommerce_is_purchasable', 'so_12959338_is_purchasable', 10, 2 );