Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

126
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda