Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

127
Vistas
One purchase allowed per week in Woocommerce

I am creating an e-commerce website. What can I add to the functions.php file of my theme to allow a customer to purchase only one product from the store and then disable any other purchases for 1 week?

The customer can buy any product but after the purchase, no further purchase of any sort can be done for one week. The customer can make any other purchases after one week only.

I could only disable purchases made for a product using this code:

add_filter( 'woocommerce_add_cart_item_data', 'woo_allow_one_item_only' );

function woo_allow_one_item_only( $cart_item_data ) {

global $woocommerce;
$woocommerce->cart->empty_cart();

// Do nothing with the data and return
return $cart_item_data;

} 

$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 );
}
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Update from July 2018 - Enhanced lighter and more effective version code

  • Simplified product add to cart validation
  • Better and much more lighter way to check if user has purchased in the passed week (embeded in a reusable conditional function).
  • Added cart and checkout validation.

The following code will allow costumer to add only one item to cart and will allow only one purchase by week, displaying error notices when needed, avoiding any prohibited purchases.

The code:

// Utility conditional function (Check if user has purchased in the passed week)
function has_week_purshases( $user_id = 0 ){
    global $wpdb;

    $customer_id = $user_id > 0 ? $user_id : get_current_user_id();

    $count = $wpdb->get_var( "
        SELECT COUNT(p.ID)
        FROM {$wpdb->prefix}posts as p
        INNER JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
        WHERE p.post_type LIKE 'shop_order'
        AND pm.meta_key LIKE '_customer_user'
        AND pm.meta_value = $customer_id
        AND UNIX_TIMESTAMP(p.post_date) >= (UNIX_TIMESTAMP(NOW()) - (86400 * 7))
    " );

    return $count > 0 ? true : false;
}

// product add to cart validation
add_filter( 'woocommerce_add_to_cart_validation', 'conditionally_allowing_product_added_to_cart', 10, 3 );
function conditionally_allowing_product_added_to_cart( $passed, $product_id, $quantity) {
    // If cart is not empty, customer will not be allowed and a notice will be displayed
    if ( ! WC()->cart->is_empty() ){
        // Display an error notice if there is already an item in cart
        wc_add_notice( __("You can only add an item to cart"), 'error' );
        $passed = false; // Not Allowed
    } elseif ( is_user_logged_in() && has_week_purshases() ) {
        // Display an error notice when customer is not allowed yet
        wc_add_notice( __("You are not allowed yet to add any product in cart"), 'error' );
        $passed = false; // Not Allowed
    }
    return $passed;
}

// Cart and checkout validation
add_action( 'woocommerce_check_cart_items', 'conditionally_allowing_checkout' );
add_action( 'woocommerce_checkout_process', 'conditionally_allowing_checkout' );
function conditionally_allowing_checkout() {
    if ( sizeof(WC()->cart->get_cart()) > 1 ) {
        // Display an error notice if there is more than 1 item in cart
        wc_add_notice( _("You can only have only one item in cart"), 'error' );
    } elseif ( is_user_logged_in() && has_week_purshases() ) {
        // Display an error notice when customer is not allowed yet
        wc_add_notice( __("You are not allowed yet to make purchases"), 'error' );
    }
}

The code goes in function.php file of your active child theme (or active theme). Tested and works.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda