首次购买任何产品后,有没有办法阻止登录用户购买任何产品?
我想限制每个订阅只购买一个产品,然后在任何产品上都没有商店,只有新订阅。
我发现了一个过滤器几乎可以满足我的需求,但每个产品只能限制一个,
add_filter('woocommerce_add_to_cart_validation','rei_woocommerce_add_to_cart_validation',20, 2);
function rei_woocommerce_add_to_cart_validation($valid, $product_id){
$current_user = wp_get_current_user();
if ( wc_customer_bought_product( $current_user->user_email, $current_user->ID, $product_id)) {
wc_add_notice( __( 'Purchased', 'woocommerce' ), 'error' );
$valid = false;
}
return $valid;
}
但我需要在首次购买订阅后锁定所有其他产品。
也许最好的方法是当用户点击在结账页面支付产品时(此时他需要登录)并检查他是否已经购买过任何产品..如果是的话,他不能支付,只有新订阅...
我对编码很难看。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
这里是一种解决方案,用于每个购物车一个订阅,如果您将订阅用作产品,则为成员资格。希望我知道可以归功于谁,但我已经在魔术包中放了一段时间了。
/**
* c.)
* @return (bool)
*/
add_filter( 'woocommerce_add_to_cart_validation','wpso35381172_validate_block_one_sub', 10, 2 );
function wpso35381172_validate_block_one_sub( $valid, $product_id ) {
// Get the current product
$current_product = wc_get_product( $product_id );
// See if the current product user's are viewing is a subscription product
if ( $current_product instanceof WC_Product_Subscription ||
$current_product instanceof WC_Product_Variable_Subscription ) {
foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
// Loop through all products in the cart
$_product = $values['data'];
// Check if current item is a subscription type
if( $_product instanceof WC_Product_Subscription ||
$_product instanceof WC_Product_Subscription_Variation ) {
// Display a notice and cancel the addition of item to cart
wc_add_notice( "Only one Subscription or Membership plan can be purchased." );
return false;
}
}
}
return $valid;
}
这适用于WC 3.0及更高版本,并使用WCS_类的实例。
答案 1 :(得分:0)
对于那些正在寻找相同答案的人来说,这就是我所做的:
// Get all customer orders
$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => wc_get_order_types(),
'post_status' => array( 'wc-pending', 'wc-processing', 'wc-on-hold', 'wc-completed' ),
) );
// Order count
$order_count = 1;
if ( count( $customer_orders ) >= $order_count ) {
add_filter( 'woocommerce_is_purchasable', false );
}
答案 2 :(得分:0)
我在阅读OP的要求略有不同。也就是说,每个用户一次只能拥有一个订阅。为此,这是我的解决方案:
add_filter( 'woocommerce_add_to_cart_validation','so_validate_block_one_sub', 10, 2 );
function so_validate_block_one_sub( $valid, $product_id ) {
$has_sub = wcs_user_has_subscription( '', '', 'active' );
if ( $has_sub ) {
wc_add_notice( __("You can not have more than one subscription.", "so-additions") );
return false;
}
}