In questi giorni sto lavorando ad un sito ecommerce realizzato con Woocommerce su WordPress, il cliente rivende prodotti farmaceutici, alcuni dei quali hanno la necessità di una prescrizione medica.
La richiesta specifica è stata quella di avere un campo aggiuntivo da compilare obbligatoriamente (Codice Medico) solo se nel carrello è presente un prodotto di una determinata categoria.
Ho risolto il problema scrivendo una piccola funzione PHP che mi controlla se nel carrello ci sono dei prodotti di dterminate categorie, quindi se ci sono mi fa un print del campo aggiuntivo, diversamente non appare.
Questo è il codice creato
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
/** * Add the field to the checkout */ add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); // Our hooked in function - $fields is passed via the filter! function custom_override_checkout_fields( $fields ) { $fields['billing']['my_field_name'] = array( 'label' => __('Codice medico', 'woocommerce'), 'placeholder' => _x('Inserisci il codice del tuo medico', 'placeholder', 'woocommerce'), 'required' => true, 'class' => array('form-row-wide'), 'clear' => true ); return $fields; } /** * Process the checkout */ add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process'); function my_custom_checkout_field_process() { // Check if set, if its not set add an error. if ( isset($_POST['my_field_name']) && empty($_POST['my_field_name']) ) wc_add_notice( __( '<h4 style="color:red;">Stai acquistando un prodotto per cui è necessaria la prescrizione medica. Per favore inserisci il codice del tuo medico per proseguire. Grazie.</h4>' ), 'error' ); } /** * Update the order meta with field value */ add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta' ); function my_custom_checkout_field_update_order_meta( $order_id ) { if ( ! empty( $_POST['my_field_name'] ) ) { update_post_meta( $order_id, 'Codice Medico', sanitize_text_field( $_POST['my_field_name'] ) ); } } /** * Display field value on the order edit page */ add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 ); function my_custom_checkout_field_display_admin_order_meta($order){ echo '<p><strong>'.__('Codice Medico').':</strong> ' . get_post_meta( $order->id, 'Codice Medico', true ) . '</p>'; } /* Adding Custom Fields to Emails 1. Add this snippet to your theme's functions.php file 2. Change the meta key names in the snippet 3. Create a custom field in the order post - e.g. key = "Tracking Code" value = abcdefg 4. When next updating the status, or during any other event which emails the user, they will see this field in their email */ add_filter('woocommerce_email_order_meta_keys', 'my_custom_order_meta_keys'); function my_custom_order_meta_keys( $keys ) { $keys[] = 'Codice Medico'; // This will look for a custom field called 'Tracking Code' and add it to emails return $keys; } /** * Conditionally remove checkout fields */ add_filter( 'woocommerce_checkout_fields' , 'conditional_unset_checkout_field', 99, 1 ); function conditional_unset_checkout_field( $fields ) { $categories = array( 'prodotti-in-polvere-e-bustine', 'gel-e-creme', 'prodotti-in-capsule', 'prodotti-plantari', 'prodotti-liquidi', 'area-riservata' ); $has_cat = false; // Iterating through each cart items (products) foreach(WC()->cart->get_cart() as $cart_item){ $categories_product = get_the_terms($cart_item['product_id'], 'product_cat'); foreach ($categories_product as $category_product){ if(in_array($category_product->slug, $categories)) { $has_cat = true; break; } } if($has_cat) break; } if ( !$has_cat ) { unset( $fields['billing']['my_field_name'] ); } return $fields; } |
Il codice va copiato nel file functions.php del vostro tema WordPress, oppure potete creare un plugin per WordPress
Programmatore WordPress Esperto WooCommerce
Sono l’autore di questo blog con tanti trucchi e guide su WordPress e WooCommerce.