Pubblicato da: Roberto
Commenti: 0
Data di pubblicazione: 27/04/2021
Se hai necessità di vietare l’acquisto di un determinato prodotto, in quanto non hai modo di poterlo spedire in una determinata città, è possibile farlo con un semplice snippet.
Woocommerce utilizza il campo PROVINCIA, che nelle altre nazioni è inteso come STATO.
La via più facile è quella di sfruttare il controllo di woocommerce, quando in fase di fatturazione e/o spedizione, chiede la compilazione dei dati.
Questo snippet si avvia quando, alla compilazione, avviene il controllo del campo PROVINCIA.
Snippet utilizzabile se si fa solo spedizioni in ITALIA
/** * @snippet Vietare acquisto di un prodotto che non puo essere spedito in una determinata provincia*/ function your_states_shipping_settings(){ $results = array(); $results['type'] = true; // Sostituisci BA con la provincia desiderata $results['states'] = array( 'BA' ); if( $results['type'] ){ // Sostituisci 16 con l'id del prodotto in questione $results['matching'] = array( 16 ); } else { // Sostituisci "inventata" se vuoi farlo per categoria (Accetta ID, Slug o Nome) $results['matching'] = array('inventata' ); } // Messaggio $results['message'] = __( "Non può essere spedito nella tua città. Eliminalo dal carrello per procedere con il restante acquisto", "woocommerce" ); return $results; } // Utility Controllo Carrello function get_items_names( $matching, $package, $type ){ $product_names = array(); foreach( $package['contents'] as $item ){ if( $type ){ if( in_array( $item['data']->get_id(), $matching ) ) $product_names[] = $item['data']->get_name(); } else { if( has_term( $matching, 'product_cat', $item['product_id'] ) ) $product_names[] = $item['data']->get_name(); } } return $product_names; } // Disabilita la spedizione add_filter('woocommerce_package_rates','custom_states_shipping_rules', 10, 2 ); function custom_states_shipping_rules( $rates, $package ){ if( isset($package['destination']['state'] ) && isset($package['contents']) ){ $data = your_states_shipping_settings(); if( in_array( $package['destination']['state'] , $data['states'] ) ) return $rates; $product_names = get_items_names( $data['matching'], $package, $data['type'] ); if( count($product_names) > 0 ){ foreach( $rates as $rate_id => $rate ) unset( $rates[$rate_id] ); } } return $rates; } // Fai apparire il messaggio add_filter('woocommerce_cart_no_shipping_available_html','custom_states_shipping_notice', 10, 1 ); add_filter('woocommerce_no_shipping_available_html','custom_states_shipping_notice', 10, 1 ); function custom_states_shipping_notice( $html ){ $package = WC()->shipping->get_packages()[0]; if( isset($package['destination']['state'] ) && isset($package['contents']) ){ $data = your_states_shipping_settings(); if( in_array( $package['destination']['state'] , $data['states'] ) ) return $html; $product_names = get_items_names( $data['matching'], $package, $data['type'] ); if( count($product_names) > 0 ){ $text = '"' . implode( '", "', $product_names ) . '" ' . $data['message']; $html = wpautop( $text ); } } return $html; }
Lascia un commento