Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Aelia EU VAT Assistant for WooCommerce - Make VAT number required when one
- * or more product from specific categories are in the cart.
- *
- * HOW TO USE THIS CODE
- * Add the code to the bottom of your theme's functions.php file (see https://www.skyverge.com/blog/add-custom-code-to-wordpress/).
- * The code will intercept the checkout process automatically and set the VAT number
- * field as "required", depending on the content of the cart.
- *
- * GPL DISCLAIMER
- * Because this code program is free of charge, there is no warranty for it, to the extent permitted by applicable law.
- * Except when otherwise stated in writing the copyright holders and/or other parties provide the program "as is"
- * without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of
- * merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program
- * is with you. should the program prove defective, you assume the cost of all necessary servicing, repair or correction.
- *
- * Need a consultation, or assistance to customise this code? Find us on Codeable: https://aelia.co/hire_us
- */
- /**
- * Returns the categories assigned to a product.
- *
- * @param WC_Product product
- * @return array
- */
- function aelia_get_product_categories($product) {
- $result = array();
- // Get all the categories to which a product is assigned
- $categories = wp_get_post_terms($product->get_id(), 'product_cat');
- // The $categories array contains a list of objects. Most likely, we would
- // like to have categorys slug as a keys, and their names as values. The
- // wp_list_pluck() function is perfect for this
- $categories = wp_list_pluck($categories, 'name', 'slug');
- return $categories;
- }
- /**
- * Makes the VAT number required when products from specific categories are
- * added to the cart.
- *
- * @param bool vat_number_required
- * @param string customer_country
- * @return bool
- */
- add_filter('wc_aelia_euva_order_is_eu_vat_number_required', function($vat_number_required, $customer_country) {
- // If the VAT number is already required, just return the flag as it is
- if($vat_number_required) {
- return $vat_number_required;
- }
- // An array of category IDs for which the VAT number is required
- $categories_requiring_vat_number = array(
- 'category1',
- 'category2',
- );
- foreach(WC()->cart->get_cart() as $item) {
- // $item['data'] contains a product instance
- if(!empty($item['data'])) {
- // The keys of the returned array are the category IDs
- $product_categories = array_keys(aelia_get_product_categories($item['data']));
- $matching_categories = array_intersect($categories_requiring_vat_number, $product_categories);
- // As soon as we find one product from one of the "VAT number required"
- // categories, we can stop
- if(!empty($matching_categories)) {
- $vat_number_required = true;
- }
- }
- }
- return $vat_number_required;
- }, 10, 2);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement