Jump to content

Lyse

Members
  • Posts

    35
  • Joined

  • Last visited

Everything posted by Lyse

  1. In Canada we do have a complex tax system. Both WooCommerce and The Wholesale Suite Prices plugin do not integrate that complexity. So special tax rate tables and supporting functions had to be created to work around taxes and their exemptions per customer role. The shipping methods case is as a result of my client offering reduced flat shipping rates for wholesale customers only reaching membership purchasing levels. The Wholesale plugin allows mapping of the shipping methods by roles, however I would have to map all of the existing shipping methods for each wholesale role (15 * 7 shipping methods). The developer won't help with creating a function to do this more efficiently. To create the rates and methods for each customer would require development that I can't do myself. So I revert to using functions to work around the specific requirements. The data structure is MYSQL with tables.
  2. I'm so sorry, but I thought we were close to making this work. But thank you for all of your help.
  3. The testing was done after I removed the commented code. I simply recopied the arrays from the one that worked yesterday. I'm still no sure what "(" I was missing, but it works well now. I get other parsing errors/notices about code following the arrays. On my checkout page I see these two notices: Notice: Undefined variable: current_user in /nas/content/staging/silviafindings/wp-content/themes/enfold-child/functions.php on line 723Notice: Trying to get property 'ID' of non-object in /nas/content/staging/silviafindings/wp-content/themes/enfold-child/functions.php on line 723 In the PHP checker I see this: PHP Syntax Check: Parse error: syntax error, unexpected '$wwp_wholesale_role' (T_VARIABLE) in your code on line... for the line $wwp_wholesale_role = $wwp_wholesale_roles->getUserWholesaleRole();
  4. I just retested the array and it now works with no parse errors.
  5. I do agree that it's much easier to see and follow the code when it's indented and outdented. I used a code snippet from someone else to accomplish what I wanted and the fact that I'm not too proficient in PHP I do not date to change any thing, most particularly the structure. I have used your suggestion through this one and it's clearer now. Here's the revised code snippet with line 655 commented out with the parse error. /* HIDE WHOLESALE PREMIUM & UNION SHIPPING METHODS FROM ALL OTHER ROLES */ /* Hide specific shipping methods for specific wholesale roles */ add_filter( 'woocommerce_package_rates', function( $shipping_rates ) { // User role and shipping method ID to hide for the user role $role_shipping_method_arr = array ( 'retail' => array ( 'customer' => array  /*Parse error: syntax error, unexpected '' (T_STRING), expecting '(' */ 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)'  ), 'customer_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'customer_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ) ), 'wholesale' => array ( 'wholesale_customer' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'wholesale_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'wholesale_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_silver' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_silver_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_silver_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_gold' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_gold_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_gold_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ) ) ); // Getting the current user role $curr_user = wp_get_current_user(); $curr_user_data = get_userdata($current_user->ID); // Wholesale Suite Roles if (isset($current_user) && class_exists('WWP_Wholesale_Roles')) { $wwp_wholesale_roles = WWP_Wholesale_Roles::getInstance(); $wwp_wholesale_role = $wwp_wholesale_roles->getUserWholesaleRole(); // Loop through the user role and shipping method pair foreach( $role_shipping_method_arr as $role => $shipping_methods_to_hide ) { // Check if defined role exist in current user role or not if( in_array( $role, $current_user->roles)) { // Loop through all the shipping rates foreach( $shipping_rates as $shipping_method_key => $shipping_method ) { $shipping_id = $shipping_method->get_id(); // Unset the shipping method if found if( in_array( $shipping_id, $shipping_methods_to_hide) ) { unset($shipping_rates[$shipping_method_key]); } } } } } return $shipping_rates; });
  6. I have add the array into my code snippet but get a Parse error: syntax error, unexpected '' (T_STRING), expecting '(' in /nas/content/staging/silviafindings/wp-content/themes/enfold-child/functions.php on line 655. Line 655 is in the customer array 'Silvia Premium Standard Shipping (Tracking Service)', Here's the code snippet: /* HIDE WHOLESALE PREMIUM & UNION SHIPPING METHODS FROM ALL OTHER ROLES */ /* Hide specific shipping methods for specific wholesale roles */ add_filter( 'woocommerce_package_rates', function( $shipping_rates ) { // User role and shipping method ID to hide for the user role $role_shipping_method_arr = array ( 'retail' => array ( 'customer' => array  ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)'  ), 'customer_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'customer_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ) ), 'wholesale' => array ( 'wholesale_customer' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'wholesale_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'wholesale_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_silver' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_silver_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_silver_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_gold' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_gold_pst_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), 'ws_silvia_gold_tax_exempt' => array ( 'Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ) ) ); // Getting the current user role $curr_user = wp_get_current_user(); $curr_user_data = get_userdata($current_user->ID); // Wholesale Suite Roles if (isset($current_user) && class_exists('WWP_Wholesale_Roles')) { $wwp_wholesale_roles = WWP_Wholesale_Roles::getInstance(); $wwp_wholesale_role = $wwp_wholesale_roles->getUserWholesaleRole(); // Loop through the user role and shipping method pair foreach( $role_shipping_method_arr as $role => $shipping_methods_to_hide ) { // Check if defined role exist in current user role or not if( in_array( $role, $current_user->roles) ) { // Loop through all the shipping rates foreach( $shipping_rates as $shipping_method_key => $shipping_method ) { $shipping_id = $shipping_method->get_id(); // Unset the shipping method if found if( in_array( $shipping_id, $shipping_methods_to_hide) ) { unset($shipping_rates[$shipping_method_key]); } } } } } return $shipping_rates; });
  7. This is what I get: Array is Array ( [retail] => Array ( [customer] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [customer_pst_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [customer_tax_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) ) [wholesale] => Array ( [wholesale_customer] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [wholesale_pst_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [wholesale_tax_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [ws_silvia_silver] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [ws_silvia_silver_pst_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [ws_silvia_silver_tax_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [ws_silvia_gold] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [ws_silvia_gold_pst_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) [ws_silvia_gold_tax_exempt] => Array ( [0] => Silvia Premium Standard Shipping (Tracking Service) [1] => Silvia Union Standard Shipping (Tracking Service) ) ) )
  8. Think I've got them all now.... $role_shipping_method_arr = array( ['retail'] = array ( ['customer'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['customer_pst_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['customer_tax_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), ['wholesale'] = array ( ['wholesale_customer'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['wholesale_pst_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['wholesale_tax_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_silver'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_silver_pst_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_silver_tax_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_gold'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_gold_pst_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_gold_tax_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ) );
  9. So this is now what my arrays structure looks like: $role_shipping_method_arr = array( ['retail'] = array ( ['customer'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['customer_pst_exempt'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['customer_tax_exempt'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' ), ['wholesale'] = array ( ['wholesale_customer'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['wholesale_pst_exempt'] = array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['wholesale_tax_exempt'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_silver'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_silver_pst_exempt'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_silver_tax_exempt'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_gold'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_gold_pst_exempt'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)', ['ws_silvia_gold_tax_exempt'] array('Silvia Premium Standard Shipping (Tracking Service)', 'Silvia Union Standard Shipping (Tracking Service)' );
  10. It makes a lot of sense not to duplicate keys... So like this... $role_shipping_method_arr = array( $arr['retail'] ["customer"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); ["customer_pst_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); ["customer_tax_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); $arr['wholesale'] ["wholesale_customer"] = array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); ["wholesale_pst_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)");  ["wholesale_tax_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); ["ws_silvia_silver"][0] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); ["ws_silvia_silver_pst_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); ; ["ws_silvia_silver_tax_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)");  ["ws_silvia_gold"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"); ["ws_silvia_gold_pst_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)");  ["ws_silvia_gold_tax_exempt"] array( "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)");
  11. Here's how I understood your last comments: $role_shipping_method_arr = array( $arr['retail'] ["customer"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["customer_pst_exempt"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["customer_tax_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)"; ["customer"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["customer_pst_exempt"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["customer_tax_exempt"[0]] = "Silvia Union Standard Shipping (Tracking Service)"[1]; $arr['wholesale'] ["wholesale_customer"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["wholesale_pst_exempt"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["wholesale_tax_exempt"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["ws_silvia_silver"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["ws_silvia_silver_pst_exempt"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["ws_silvia_silver_tax_exempt"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["ws_silvia_gold"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["ws_silvia_gold_pst_exempt"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["ws_silvia_gold_tax_exempt"][0] = "Silvia Premium Standard Shipping (Tracking Service)"[1]; ["wholesale_customer"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["wholesale_pst_exempt"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["wholesale_tax_exempt"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["ws_silvia_silver"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["ws_silvia_silver_pst_exempt"][0] = Silvia Union Standard Shipping (Tracking Service)"[1]; ["ws_silvia_silver_tax_exempt"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["ws_silvia_gold"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["ws_silvia_gold_pst_exempt"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1]; ["ws_silvia_gold_tax_exempt"][0] = "Silvia Union Standard Shipping (Tracking Service)"[1];
  12. So I've added the quotes for the string values. I show two shipping methods as values for each key customer. Here's the updated code: $arr['retail'] ["customer"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["customer_pst_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["customer_tax_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; $arr['wholesale'] ["wholesale_customer"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["wholesale_pst_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["wholesale_tax_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["ws_silvia_silver"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["ws_silvia_silver_pst_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["ws_silvia_silver_tax_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["ws_silvia_gold"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["ws_silvia_gold_pst_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)"; ["ws_silvia_gold_tax_exempt"] = "Silvia Premium Standard Shipping (Tracking Service)", "Silvia Union Standard Shipping (Tracking Service)";
  13. So my first two arrays would look like this" $arr['retail'] [customer] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [customer_pst_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [customer_tax_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_gold] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_gold_pst_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_gold_tax_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); $arr['wholesale'] [wholesale_customer] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [wholesale_pst_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [wholesale_tax_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_silver] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_silver_pst_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_silver_tax_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_gold] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_gold_pst_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service); [ws_silvia_gold_tax_exempt] = Silvia Premium Standard Shipping (Tracking Service), Silvia Union Standard Shipping (Tracking Service);
  14. And what would the arrays look like. I'm no proficient in PHP enough working with arrays to create this level of code. Can you help in any way?
  15. I use both retail and wholesale on my website. As part of the wholesale, because I live in Canada and have two taxes that can also be exempted, so I end up with 15 wholesale roles because of taxes. Of these 15 wholesale roles, 6 of them get special shipping methods that offers reduced flat rate shipping. The 6 wholesale roles that get reduced flat rate shipping are the wholesale membership levels: ws_silvia_premium, ws_silvia_premium_PST_exempt, ws_silvia_premium_tax_exempt, ws_silvia_union, ws_silvia_union_PST_exempt, ws_silvia_union_tax_exempt. I want to be able to hide the special shipping methods for the remaining wholesale roles (which I included in the code). The other option could be to only show the special shipping methods to only those 6 roles. Hope this clarifies what I'm trying to do.
  16. Yes, I'm aware that the array is faulty, but I'm not sure how to fix it. The secondary array was to hold the value (the shipping method that I don't want to show to only two wholesale roles).
  17. I use the Wholesale Suite Premium Prices plugin with WooCommerce. I have 6 specific wholesale roles out of 15 that I wish to hide two specific shipping methods from being selected for the 6 exceptions. I'm just trying this on my staging server at this time using a code snippet example that I found and modified for my specific conditions. Would the following work for this purpose? /* Hide specific shipping methods for specific wholesale roles */ add_filter( 'woocommerce_package_rates', function( $shipping_rates ) { // User role and shipping method ID to hide for the user role $role_shipping_method_arr = array( 'ws_silvia_silver' => array( 'Silvia Premium Standard Shipping (Tracking Service)'), 'ws_silvia_silver_pst_exempt' => array( 'Silvia Premium Standard Shipping (Tracking Service)'), 'ws_silvia_silver_tax_exempt' => array( 'Silvia Premium Standard Shipping (Tracking Service)'), 'ws_silvia_silver' => array( 'Silvia Union Standard Shipping (Tracking Service)'), 'ws_silvia_silver_pst_exempt' => array( 'Silvia Union Standard Shipping (Tracking Service)'), 'ws_silvia_silver_tax_exempt' => array( 'Silvia Union Standard Shipping (Tracking Service)'), 'ws_silvia_gold' => array( 'Silvia Premium Standard Shipping (Tracking Service)'), 'ws_silvia_gold_pst_exempt' => array( 'Silvia Premium Standard Shipping (Tracking Service)'), 'ws_silvia_gold_tax_exempt' => array( 'Silvia Premium Standard Shipping (Tracking Service)'), 'ws_silvia_gold' => array( 'Silvia Union Standard Shipping (Tracking Service)'), 'ws_silvia_gold_pst_exempt' => array( 'Silvia Union Standard Shipping (Tracking Service)'), 'ws_silvia_gold_tax_exempt' => array( 'Silvia Union Standard Shipping (Tracking Service)'), ); // Getting the current user role $curr_user = wp_get_current_user(); $curr_user_data = get_userdata($current_user->ID); // Wholesale Suite Roles if (isset($current_user) && class_exists('WWP_Wholesale_Roles')) { $wwp_wholesale_roles = WWP_Wholesale_Roles::getInstance(); $wwp_wholesale_role = $wwp_wholesale_roles->getUserWholesaleRole(); // Loop through the user role and shipping method pair foreach( $role_shipping_method_arr as $role => $shipping_methods_to_hide ) { // Check if defined role exist in current user role or not if( in_array( $role, $current_user->roles) ) { // Loop through all the shipping rates foreach( $shipping_rates as $shipping_method_key => $shipping_method ) { $shipping_id = $shipping_method->get_id(); // Unset the shipping method if found if( in_array( $shipping_id, $shipping_methods_to_hide) ) { unset($shipping_rates[$shipping_method_key]); } } } } } return $shipping_rates; }); Any insights as to how to accomplish this would be greatly appreciated. Lyse
  18. I've implemented the function on my testing server and it works very well. I appreciate so so much all of the time and effort you have provided to support my needs. It's been a wonderful first time experience using this platform for help.
  19. Like so: $map = []; // charge both PST and GST $map['wholesale_customer'] = 'WholesalePSTGST'; $map['wholesale_silvia_silver'] = 'WholesalePSTGST'; $map['wholesale_silvia_gold'] = 'WholesalePSTGST'; $map['wholesale_silvia_premium'] = 'WholesalePSTGST'; $map['wholesale_silvia_union'] = 'WholesalePSTGST'; // charge only GST $map['wholesale_pst_exempt'] = 'WholesalePSTExempt'; $map['wholesale_silvia_silver_pst_exempt'] = 'WholesalePSTExempt'; $map['wholesale_silvia_gold_pst_exempt'] = 'WholesalePSTExempt'; $map['wholesale_silvia_premium_pst_exempt'] = 'WholesalePSTExempt'; $map['wholesale_silvia_union_pst_exempt'] = 'WholesalePSTExempt'; // charge neither $map['wholesale_tax_exempt'] = 'WholesaleZeroTax'; $map['wholesale_silvia_silver_tax_exempt'] = 'WholesaleZeroTax'; $map['wholesale_silvia_gold_tax_exempt'] = 'WholesaleZeroTax'; $map['wholesale_silvia_premium_tax_exempt'] = 'WholesaleZeroTax'; $map['wholesale_silvia_union_tax_exempt'] = 'WholesaleZeroTax';
  20. I've already created tax rates classes and tax table rates in WooCommerce. so I don't need to calculate the tax within is function.
  21. My function looks like this: /* * APPLY DIFFERENT TAX RATE BASED ON CUSTOMER USER ROLE * (Code compacted in one unique hook instead of 5 functions with the same hook) */ // in the original version, the $tax_class input is conditionally modified and returned. $product is not used. function all_custom_tax_classes( $tax_class, $product ) { global $current_user; // used in isset() only // Getting the current user $curr_user = wp_get_current_user(); // not used in 'active' code $curr_user_data = get_userdata($current_user->ID); // not used in 'active' code // 1 customer_tax_exempt /* special tax rate: zero if role: Customer Tax Exempt */ /*if ( in_array( 'customer_tax_exempt', $curr_user_data->roles ) ) $tax_class = 'CustomerTaxExemptClass'; // 2 customer_pst_exempt // special tax rate: charge only GST if role: Customer PST Exempt if ( in_array( 'customer_pst_exempt', $curr_user_data->roles ) ) $tax_class = 'CustomerPSTExemptClass'; */ // 3, 4 & 5 WHOLESLE SUITE SPECIAL WHOLESALE TAX RATES var_dump($arrayorobject); if (isset($current_user) && class_exists('WWP_Wholesale_Roles')) { $wwp_wholesale_roles = WWP_Wholesale_Roles::getInstance(); $wwp_wholesale_role = $wwp_wholesale_roles->getUserWholesaleRole(); // get an array of the user roles - is there ever more than one element? // define an array that maps input values to output values - note: if the user role values were defined to be the same as the expected return values, this step wouldn't be needed $taxes = [ 'Wholesale Customer' => ['PST' => 1, 'GST' => 1], 'Wholesale Silvia Silver' => ['PST' => 1, 'GST' => 1],  'Wholesale Silvia Gold' => ['PST' => 1, 'GST' => 1], 'Wholesale Silvia Premium' => ['PST' => 1, 'GST' => 1], 'Wholesale Silvia Union' => ['PST' => 1, 'GST' => 1], 'wholesale_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_silver_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_gold_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_premium_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_union_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_silver_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_gold_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_premium_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_union_tax_exempt' => ['PST' => 0, 'GST' => 0] ]; $PST_payable = $taxes[$customer_role]['PST']; $GST_payable = $taxes[$customer_role]['GST']; if (!empty($wwp_wholesale_role)) { // the following assumes that the 1st role value found is what is returned. if a user can have more than one role, this differs from the original logic, in that the last role found is what is returned. // loop over the map array foreach($map as $key=>$value) { // test if the key is in the role array if(in_array($key,$wwp_wholesale_role)) { // if so, return the value corresponding to the key return $value; } } } } // if none of the role values was found in the user role(s), return the original $tax_class value to the calling code return $tax_class; } /* ADDITIONAL FILTERS TO ALTER THE SHIPPING TAX FOR DIFFERENT TAX CLASSES BASED ON CUSTOMER USER ROLE */ add_filter( 'woocommerce_product_get_tax_class', 'all_custom_tax_classes', 1, 2 ); // calls the above function add_filter( 'woocommerce_product_variation_get_tax_class', 'all_custom_tax_classes', 1, 2 ); // calls the above function // calls the in-line function. the $option_value input is returned if none of the logic returns first. add_filter( 'option_woocommerce_shipping_tax_class' , function( $option_value ) { global $wc_wholesale_prices; if ( $wc_wholesale_prices && is_a( $wc_wholesale_prices , 'WooCommerceWholeSalePrices' ) ) { $wwp_wholesale_role = $wc_wholesale_prices->wwp_wholesale_roles->getUserWholesaleRole(); // get an array of the user roles - is there ever more than one element? // define an array that maps input values to output values - note: if the user role values were defined to be the same as the expected return values, this step wouldn't be needed // use the same definition as above (you would actually do this through configuration data so as to not repeat it) // i'm assuming that the same letter-case values used above will work here. if not, alter this data as needed. $taxes = [ 'Wholesale Customer' => ['PST' => 1, 'GST' => 1], 'Wholesale Silvia Silver' => ['PST' => 1, 'GST' => 1],  'Wholesale Silvia Gold' => ['PST' => 1, 'GST' => 1], 'Wholesale Silvia Premium' => ['PST' => 1, 'GST' => 1], 'Wholesale Silvia Union' => ['PST' => 1, 'GST' => 1], 'wholesale_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_silver_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_gold_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_premium_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_silvia_union_pst_exempt' => ['PST' => 0, 'GST' => 1], 'wholesale_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_silver_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_gold_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_premium_tax_exempt' => ['PST' => 0, 'GST' => 0], 'wholesale_silvia_union_tax_exempt' => ['PST' => 0, 'GST' => 0] ]; $PST_payable = $taxes[$customer_role]['PST']; $GST_payable = $taxes[$customer_role]['GST']; if (!empty($wwp_wholesale_role)) { // the following assumes that the 1st role value found is what is returned. this is the same operation as the original code here. // loop over the map array foreach($map as $key=>$value) { // test if the key is in the role array if(in_array($key,$wwp_wholesale_role)) { // if so, return the value corresponding to the key return $value; } } } } return $option_value; } , 10 , 1 ); with a syntax error on the $taxes line But I don't know how to integrate your solution into my code to make this work. Sorry but I'm not very PHP proficient.
  22. How does this fit into the remainder of my function?
  23. Would my array look like this: $map = []; $map['wholesale_customer','wholesale_silvia_silver','wholesale_silvia_gold','wholesale_silvia_premium','wholesale_silvia_union'] = 'WholesalePSTGST'; // charge both PST and GST $map['wholesale_pst_exempt','wholesale_silvia_silver_pst_exempt','wholesale_silvia_gold_pst_exempt','wholesale_silvia_premium_pst_exempt','wholesale_silvia_union_pst_exempt'] = 'WholesalePSTExempt'; // charge only GST $map['wholesale_tax_exempt','wholesale_silvia_silver_tax_exempt','wholesale_silvia_gold_tax_exempt','wholesale_silvia_premium_tax_exempt','wholesale_silvia_union_tax_exempt'] = 'WholesaleZeroTax'; // charge neither
  24. My programming skills is basic and by no means capable to change program logic of that magnitude. I do like the idea of the $map array you suggested that looks much simpler to use. What exactly should the function end up looking like with the array?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.