Estoy creando un sitio web de comercio electrónico. ¿Qué puedo agregar al archivo functions.php de mi tema para permitir que un cliente compre solo un producto de la tienda y luego deshabilite cualquier otra compra durante 1 semana?
El cliente puede comprar cualquier producto, pero después de la compra, no se pueden realizar más compras de ningún tipo durante una semana. El cliente puede realizar cualquier otra compra después de una semana solamente.
Solo pude deshabilitar las compras realizadas para un producto usando este código:
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 ); }Actualización de julio de 2018 : código de versión más ligero y efectivo mejorado
El siguiente código permitirá al cliente agregar solo un artículo al carrito y permitirá solo una compra por semana , mostrando avisos de error cuando sea necesario, evitando compras prohibidas.
El código:
// 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' ); } }El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y funciona.