Beschränken Sie Kunden darauf, ein bestimmtes Produkt innerhalb eines bestimmten Zeitraums in WooCommerce mehrmals zu kaufen

Lesezeit: 5 Minuten

Benutzer-Avatar
LaibaMaqs

Ich suche eine Einschränkung, wenn a Gastbenutzer ein bestimmtes Produkt 2 Mal in der Woche gekauft hat, darf er nicht in der Lage sein, dasselbe Produkt erneut zu kaufen.

Ich möchte diese Einschränkung basierend auf der E-Mail des Gastbenutzers anwenden.

Ich habe viele Beiträge dazu gesehen, aber alle konzentrieren sich auf registrierte Benutzer, aber ich möchte diese Einschränkung für Gastbenutzer anwenden.

Dies ist der Code, den ich derzeit verwende, leider ohne das gewünschte Ergebnis

function my_ip_checker() {
    $last_order = get_posts(array(
        //'date_created'        => '>=' . (time() - 86400), time in seconds
    'meta_key'    => '_billing_email',
            'meta_value'  => sanitize_email( $_POST['cb_email'] ),
            'post_type'   => 'shop_order',
            'post_status' => array('wc-processing', 'wc-completed')
    ));
    if($last_order->total > 1) { 
        wc_add_notice('Too many orders in the last 24 hours. Please return later.', 'error');
    }
}
add_action('woocommerce_checkout_process', 'my_ip_checker', 10, 0);

Jede Hilfe ist willkommen.

Benutzer-Avatar
7uc1f3r

Für eine Beschränkung auf ein bestimmtes Produkt pro Woche könnten Sie verwenden:

  • Basierend auf der Rechnungs-E-Mail-Adresse
  • wc_get_orders Bereitstellung einer Standardmethode zum Abrufen von Bestellungen – wc_get_orders und WC_Order_Query
  • Funktioniert für Gastbenutzer oder angemeldete Benutzer
function action_woocommerce_checkout_process() {
    // Initialize
    $customer_email="";
    
    // Get email
    if ( is_user_logged_in() ) {
        // Get current user
        $user = wp_get_current_user();
        
        // Get email
        $customer_email = $user->user_email;
    } elseif ( isset( $_POST['billing_email'] ) && ! empty ( $_POST['billing_email'] ) ) {
        $customer_email = $_POST['billing_email'];  
    } else {
        // Get billing_email
        $customer_email = WC()->customer->get_billing_email();
    }
    
    // NOT empty
    if ( ! empty ( $customer_email ) ) {      
        // Time in seconds (1 week)
        $time_in_seconds = 604800;
        
        // Set limit per week
        $limit = 2;
        
        // Specific product id
        $specific_product_id = 30;
        
        // Get orders from last week from customer by email
        $orders_last_week_by_customer_email = wc_get_orders( array(
            'date_created'  => '>' . (time() - $time_in_seconds ),
            'customer'      => $customer_email,
        ));
        
        // Total (counter)
        $total = 0;
        
        // Iterating through each order
        foreach ( $orders_last_week_by_customer_email as $order ) {
            // Going through order items
            foreach ( $order->get_items() as $item ) {
                // Get product ID
                $product_id = $item->get_product_id();
                
                // Compare
                if ( $specific_product_id == $product_id ) {
                    // Get quantity
                    $quantity = $item->get_quantity();
                    
                    // Add to total
                    $total += $quantity;
                }
            }
        }

        // Show error when total >= limit
        if ( $total >= $limit ) {
            wc_add_notice( sprintf( __( 'You are not allowed to buy more than %d pieces of product with ID = %d in one week', 'woocommerce' ), $limit, $specific_product_id ), 'error' );
        }       
    }
}
add_action( 'woocommerce_checkout_process', 'action_woocommerce_checkout_process', 10, 0 );

So wenden Sie dies nur für Gastbenutzer an:

Ersetzen

// Get email
if ( is_user_logged_in() ) {
    // Get current user
    $user = wp_get_current_user();
    
    // Get email
    $customer_email = $user->user_email;
} elseif ( isset( $_POST['billing_email'] ) && ! empty ( $_POST['billing_email'] ) ) {
    $customer_email = $_POST['billing_email'];  
}

Mit

// Only for guests
if ( ! is_user_logged_in() ) return;

if ( isset( $_POST['billing_email'] ) && ! empty ( $_POST['billing_email'] ) ) {
    $customer_email = $_POST['billing_email'];  
}

  • Diese Einschränkung gilt für die ursprüngliche Produkt-ID. Wie stelle ich es auf nur Variations-ID ein? Bitte helfen, wenn jemand weiß

    – matin

    vor 8 Stunden

Für eine Beschränkung auf ein bestimmtes variables Produkt pro Woche habe ich verwendet:

  • Ich habe die übergeordnete Produkt-ID für die Gastbenutzereinschränkung verwendet:
  • Basierend auf der Rechnungs-E-Mail-Adresse
  • Basierend auf der Telefonnummer
  • wc_get_orders bietet eine Standardmethode zum Abrufen von Bestellungen – wc_get_orders und WC_Order_Query
function action_woocommerce_checkout_process() {
  $specific_product_name="Buy iPhone 12 with Z Protect+ included";
// Only for guests
  if ( is_user_logged_in() ) return;

  //product check start
  global $woocommerce;
  $parent_id;
  $_product="";
  $items = $woocommerce->cart->get_cart();
      foreach($items as $item => $values) { 
          $_product =  wc_get_product( $values['data']->get_id());    
      } 
      $parent_id = $_product->get_parent_id();
    if( $parent_id == 389 ){
  //product check end

      // Isset
  if ( isset( $_POST['billing_phone'] ) ) {
      // NOT empty
      if ( ! empty ( $_POST['billing_phone'] ) ) {
          $customer_phone = $_POST['billing_phone'];  
      }
  }
  
  // Isset
  if ( isset ( $customer_phone ) ) {   
         // Time in seconds (1 week)
      $time_in_seconds = 604800;
    
      // Set limit per week
      $limit = 2;
      
      // Specific product name
      $specific_product_name="Buy iPhone 12 with Z Protect+ included";
      
      // Get orders from last week from customer by phone
      $orders_last_week_by_customer_phone = wc_get_orders( array(
          'date_created' => '>' . (time() - $time_in_seconds ),
          'billing_phone' => $customer_phone,
      ));
      $total = 0;
    
      // Iterating through each order
      foreach ( $orders_last_week_by_customer_phone as $order ) {
           // Going through order items
          foreach ( $order->get_items() as $item ) {
                // Name of the producte
              $product_name = $item->get_name();
              // Compare
              if ( $specific_product_name == $product_name ) {                                            
                  // Add to total
                  $total += 1;
               }
          }
       }

      // Show error when total >= limit
      if ( $total >= $limit ) {
          wc_add_notice( sprintf( __( 'You are not allowed to buy more than %d iPhones. For more information please contact support.', 'woocommerce' ), $limit ), 'error' );
      }       
}
  // Isset
  if ( isset( $_POST['billing_email'] ) ) {
      // NOT empty
      if ( ! empty ( $_POST['billing_email'] ) ) {
          $customer_email = $_POST['billing_email'];  
      }
  }
  
  // Email NOT empty
  if ( ! empty ( $customer_email ) ) {   
       // Time in seconds (1 week)
      $time_in_seconds = 604800;
      
      // Set limit per week
      $limit = 2;
      
      // Specific product id
      $specific_product_id = 'Buy iPhone 12 with Z Protect+ included';
      
      // Get orders from last week from customer by email
      $orders_last_week_by_customer_email = wc_get_orders( array(
          'date_created' => '>' . (time() - $time_in_seconds ),
          'customer' => $customer_email,
      ));
      
      // Total (counter)
      $total = 0;
      
      // Iterating through each order
      foreach ( $orders_last_week_by_customer_email as $order ) {
          // Going through order items
          foreach ( $order->get_items() as $item ) {
              // Get product ID
              $product_id = $item->get_name();
              // Compare
              if ( $specific_product_id == $product_id ) {
                  // Get quantity
                  $quantity = $item->get_quantity(); 
                  // Add to total
                  $total += $quantity;
              }
          }
      }
      // Show error when total >= limit
      if ( $total >= $limit ) {
           wc_add_notice( sprintf( __( 'You are not allowed to buy more than %d iPhones. For more information please contact support.', 'woocommerce' ), $limit), 'error' );
      }       
  }
  //product check start
}
//product check start
}

add_action( 'woocommerce_checkout_process', 'action_woocommerce_checkout_process', 10, 0 );

Vielen Dank an die erste Antwort oben, die mir die Grundlage für den Beginn der Implementierung gegeben hat. Alle weiteren Verbesserungen in meinem Code sind willkommen.

1017110cookie-checkBeschränken Sie Kunden darauf, ein bestimmtes Produkt innerhalb eines bestimmten Zeitraums in WooCommerce mehrmals zu kaufen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy