Después de integrar el código, podrás establecer el número máximo de unidades permitidas para un producto desde la página de edición del producto, en «Datos del producto > Inventario > Máximo de unidades permitidas».
// 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 '<div class="options_group show_if_simple show_if_variable">';
woocommerce_wp_text_input( array(
'id' => '_max_amount',
'label' => __( 'Máximo de unidades permitidas', 'woocommerce' ),
'placeholder' => 0,
'desc_tip' => true,
'description' => __( 'Indica el número máximo de unidades permitidas que se pueden comprar de este producto en un mismo pedido. Usa el valor 0 para indicar que no hay límite de unidades.', 'woocommerce' ),
'type' => 'number',
'custom_attributes' => array(
'step' => 'any'
)
) );
echo '</div>';
}
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 .'.<br/><br/>';
wc_add_notice( $message, 'error' );
}
}
}
}
