javascript 如何在woocommerce中设置每个用户一年时间内对某些项目的购买限制

wbgh16ku  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(120)

嗨WooCommerce我有一个条件的产品,即产品有自定义字段购买限制与是/否选项。这里一旦用户登录购买项目,如果该项目下的购买限制(是),然后我想检查一个条件,好像用户在过去30天内已经购买了该产品,我想显示错误消息,您已经购买了此项目,并禁用“添加到购物车”按钮。如果该用户在过去30天内没有购买该产品,则可以将该产品添加到购物车。

c6ubokkw

c6ubokkw1#

在标题中你说你想限制在1个项目/年,而在描述中你提到1个项目/30天。
我其实有一个类似的solution for limiting the overall daily product stock,所以这里是一个修订版,应该工作的情况下,你想限制它为1购买/ 30天为一个登录的客户(你没有说你的自定义字段是如何调用,所以我使用占位符。请相应地更改):

add_filter( 'woocommerce_is_purchasable', 'bbloomer_not_purchasable_after_daily_limit', 9999, 2 );
 
function bbloomer_not_purchasable_after_daily_limit( $is_purchasable, $product ) {
         
   if ( get_current_user_id() > 0 ) return $is_purchasable; 

   if ( get_post_meta( $product->get_id(), '_whatever_custom_field', true ) == 'No' ) return $is_purchasable;
    
   // GET LAST 30 DAYS ORDERS FOR LOGGED IN CUSTOMER
   $all_orders = wc_get_orders(
      array(
         'limit' => -1,
         'date_created' => date( 'Y-m-d', strtotime( '-30 days' ) ),
         'customer_id' => get_current_user_id(),
         'return' => 'ids',
      )
   );
   $count = 0;
   foreach ( $all_orders as $all_order ) {
      $order = wc_get_order( $all_order );
      $items = $order->get_items();
      foreach ( $items as $item ) {
         $product_id = $item->get_product_id();
         if ( $product_id == $product->get_id() ) {
            $count = $count + absint( $item['qty'] ); 
         }
      }
   }
    
   // LIMIT 1 SALE
   if ( $count >= 1 ) return false;
    
   return $is_purchasable;
    
}

这只会隐藏Add to Cart消息,并拒绝登录客户购买他们在过去30天内购买的给定产品。
如果你也想显示一个通知,我猜在单一产品页面,你可以使用以下:

add_action( 'woocommerce_single_product_summary', 'bbloomer_display_message_if_not_purchasable_single_product', 20 );

function bbloomer_display_message_if_not_purchasable_single_product() {
    global $product;    
    if ( ! $product->is_purchasable() ) {
        echo '<p>You already purchased this product in the last 30 days</p>';
    }
}

相关问题