Snippet util Woocommerce: Limita cantidad de unidades de producto que un cliente puede comprar en un pedido.
Snippet que limita la cantidad de unidades de producto que un usuario puede comprar en un mismo producto en WooCommerce.
Después de añadir el código podrás definir la cantidad de producto permitidas desde la página de edición del producto, en “Datos del producto > Inventario > Máximo de unidades permitidas”.
Snippet que limita cantidad de unidades de producto que un cliente puede comprar en un mismo pedido de WooCommerce
// Limita el número máximo de unidades a nivel de producto que un cliente puede comprar en un mismo pedido
if ( in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins' ) ) ){
add_action( 'woocommerce_product_options_inventory_product_data', 'enable_option_inventory_product_data_tab' );
function enable_option_inventory_product_data_tab(){
wp_nonce_field( plugin_basename(__FILE__), 'woocommerce_max_amount_nonce' );
echo '
'; wc_add_notice( $message, 'error' ); } } } }
';
}
add_action( 'save_post', 'save_max_amount_meta_data', 99, 2 );
function save_max_amount_meta_data( $post_id, $post ) {
/* --- security verification --- */
if ( 'product' !== $post->post_type ) {
return $post_id;
}
if( !wp_verify_nonce( $_POST['woocommerce_max_amount_nonce'], plugin_basename(__FILE__) ) ) {
return $post_id;
}
if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return $post_id;
}
if( 'product' == $_POST['post_type'] ) {
if( !current_user_can('edit_page', $post_id) ) {
return $post_id;
}
} else {
if( !current_user_can( 'edit_page', $post_id ) ) {
return $post_id;
}
}
/* - end security verification - */
if( isset( $_POST[ '_max_amount' ] ) ) {
$max_amount = $_POST[ '_max_amount' ];
update_post_meta( $post_id, '_max_amount', $max_amount );
}
}
add_action( 'woocommerce_check_cart_items', 'max_products_units_allowed' );
function max_products_units_allowed(){
$cart_content = WC()->cart->get_cart();
foreach ( $cart_content as $key => $product ) {
$max_amount = get_post_meta( $product[ 'data' ]->id, '_max_amount', true );
if ( !empty( $max_amount ) && ( $max_amount < $product[ 'quantity' ] ) ) {
// Resetea el número de unidades del producto al máximo permitido
WC()->cart->set_quantity( $key, $max_amount );
// Muestra el mensaje de aviso de que ha superado el número máximo de uds permitida
$message = 'Lo sentimos. Pero el número máximo de unidades del producto "'. $product[ 'data' ]->post->post_title .'" que puedes comprar en un mismo pedido es '. $max_amount .'.'; wc_add_notice( $message, 'error' ); } } } }