Advertisement
palsushobhan

calculate tax based on vendor store address

Mar 22nd, 2022
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.33 KB | None | 0 0
  1. add_filter( 'woocommerce_cart_totals_get_item_tax_rates', function( $item_tax_rates, $item, $cart ) {
  2.     if ( ! $cart->needs_shipping() ) return $item_tax_rates;
  3.     $packages = $cart->get_shipping_packages();
  4.     if ( empty( $packages ) ) return $item_tax_rates;
  5.     $product_id = $item->product->get_id();
  6.     if ( ! $product_id ) return $item_tax_rates;
  7.     $pvendor_id = wcfm_get_vendor_id_by_post( $product_id );
  8.     if ( ! $pvendor_id ) return $item_tax_rates;
  9.  
  10.     foreach ( $packages as $svendor_id => $package ) {
  11.         if( function_exists( 'wcfm_is_vendor' ) && wcfm_is_vendor( $svendor_id ) && ( $pvendor_id == $svendor_id ) ) {
  12.             $chosen_method = isset( WC()->session->chosen_shipping_methods[ $svendor_id ] ) ? WC()->session->chosen_shipping_methods[ $svendor_id ] : '';
  13.             $id = explode(":", $chosen_method, 2);
  14.             $id = $id[0];
  15.  
  16.             $vendor_data = get_user_meta( $pvendor_id, 'wcfmmp_profile_settings', true );
  17.             $calculate_tax_for = array();
  18.             $calculate_tax_for['city'] = isset( $vendor_data['address']['city'] ) ? $vendor_data['address']['city'] : '';
  19.             $calculate_tax_for['postcode'] = isset( $vendor_data['address']['zip'] ) ? $vendor_data['address']['zip'] : '';
  20.             $calculate_tax_for['country'] = isset( $vendor_data['address']['country'] ) ? $vendor_data['address']['country'] : '';
  21.             $calculate_tax_for['state'] = isset( $vendor_data['address']['state'] ) ? $vendor_data['address']['state'] : '';
  22.             $location = array(
  23.                 $calculate_tax_for['country'],
  24.                 $calculate_tax_for['state'],
  25.                 $calculate_tax_for['postcode'],
  26.                 $calculate_tax_for['city'],
  27.             );
  28.             $tax_class = $item->product->get_tax_class();
  29.             if ( count( $location ) === 4 ) {
  30.                 list( $country, $state, $postcode, $city ) = $location;
  31.                 $item_tax_rates = WC_Tax::find_rates(
  32.                     array(
  33.                     'country' => $country,
  34.                     'state' => $state,
  35.                     'postcode' => $postcode,
  36.                     'city' => $city,
  37.                     'tax_class' => $tax_class,
  38.                     )
  39.                 );
  40.             }
  41.             break;
  42.         }
  43.     }
  44.     return $item_tax_rates;
  45. }, 500, 3 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement