Remove duplicated shipping packages using a shipping class in Woocommerce
The products in my website are handled by one of that 2 shipping plugins: Printful Integration for WooCommerce and Printify for WooCommerce Shipping. when there is mixed items from each shipping plugin. Those plugins split each one the shipping package in two when there is mixed items (which is a a conflict and a problem).
So I have added a shipping class 'printful'
(which id is 548
) to the products that are handled by the Printful plugin, and tried to adjust Hide shipping method for specific shipping classes in woocommerce answer code by @LoicTheAzec (cheers), to only remove the shipping method from a specific duplicated shipping packages with ids 2 and 3 due to the conflict between the shipping plugins…
Here is my actual code:
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 548; //CAMDEN HARBOR CHART MUG is in shipping class
// HERE define the shipping methods you want to hide
$method_key_ids = array('printify_shipping_s', 'printify_shipping_e');
// Checking in cart items
foreach( WC()->cart->get_cart() as $cart_item )
// If we find the shipping class
if( $cart_item['data']->get_shipping_class_id() == $class )
foreach( $method_key_ids as $method_key_id )
unset($rates[$method_key_id]); // Remove the targeted methods
break; // Stop the loop
return $rates;
But it's not working and I still get 4 shipping packages instead of two:
Any help is appreciated.
php wordpress woocommerce cart shipping-method
add a comment |
The products in my website are handled by one of that 2 shipping plugins: Printful Integration for WooCommerce and Printify for WooCommerce Shipping. when there is mixed items from each shipping plugin. Those plugins split each one the shipping package in two when there is mixed items (which is a a conflict and a problem).
So I have added a shipping class 'printful'
(which id is 548
) to the products that are handled by the Printful plugin, and tried to adjust Hide shipping method for specific shipping classes in woocommerce answer code by @LoicTheAzec (cheers), to only remove the shipping method from a specific duplicated shipping packages with ids 2 and 3 due to the conflict between the shipping plugins…
Here is my actual code:
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 548; //CAMDEN HARBOR CHART MUG is in shipping class
// HERE define the shipping methods you want to hide
$method_key_ids = array('printify_shipping_s', 'printify_shipping_e');
// Checking in cart items
foreach( WC()->cart->get_cart() as $cart_item )
// If we find the shipping class
if( $cart_item['data']->get_shipping_class_id() == $class )
foreach( $method_key_ids as $method_key_id )
unset($rates[$method_key_id]); // Remove the targeted methods
break; // Stop the loop
return $rates;
But it's not working and I still get 4 shipping packages instead of two:
Any help is appreciated.
php wordpress woocommerce cart shipping-method
you can't targetshipping_method_2_printify_shipping_s
as its just an html tag id… What you are targeting isprintify_shipping_s
orprintify_shipping_e
for the package ID 2. But forwoocommerce_package_rates
filter hook there is no way to target a specific package ID, so the code from my answer will not be useful in your case. I dont have the answer to your question and I can't help.
– LoicTheAztec
Nov 7 '18 at 16:36
@LoicTheAztec Thank you for your insight and quick response. Basically I just want to remove 'Shipping 3' and 'Shipping 4' imgur.com/a/2HZRaCw
– user2059376
Nov 7 '18 at 16:41
add a comment |
The products in my website are handled by one of that 2 shipping plugins: Printful Integration for WooCommerce and Printify for WooCommerce Shipping. when there is mixed items from each shipping plugin. Those plugins split each one the shipping package in two when there is mixed items (which is a a conflict and a problem).
So I have added a shipping class 'printful'
(which id is 548
) to the products that are handled by the Printful plugin, and tried to adjust Hide shipping method for specific shipping classes in woocommerce answer code by @LoicTheAzec (cheers), to only remove the shipping method from a specific duplicated shipping packages with ids 2 and 3 due to the conflict between the shipping plugins…
Here is my actual code:
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 548; //CAMDEN HARBOR CHART MUG is in shipping class
// HERE define the shipping methods you want to hide
$method_key_ids = array('printify_shipping_s', 'printify_shipping_e');
// Checking in cart items
foreach( WC()->cart->get_cart() as $cart_item )
// If we find the shipping class
if( $cart_item['data']->get_shipping_class_id() == $class )
foreach( $method_key_ids as $method_key_id )
unset($rates[$method_key_id]); // Remove the targeted methods
break; // Stop the loop
return $rates;
But it's not working and I still get 4 shipping packages instead of two:
Any help is appreciated.
php wordpress woocommerce cart shipping-method
The products in my website are handled by one of that 2 shipping plugins: Printful Integration for WooCommerce and Printify for WooCommerce Shipping. when there is mixed items from each shipping plugin. Those plugins split each one the shipping package in two when there is mixed items (which is a a conflict and a problem).
So I have added a shipping class 'printful'
(which id is 548
) to the products that are handled by the Printful plugin, and tried to adjust Hide shipping method for specific shipping classes in woocommerce answer code by @LoicTheAzec (cheers), to only remove the shipping method from a specific duplicated shipping packages with ids 2 and 3 due to the conflict between the shipping plugins…
Here is my actual code:
add_filter( 'woocommerce_package_rates', 'hide_shipping_method_based_on_shipping_class', 10, 2 );
function hide_shipping_method_based_on_shipping_class( $rates, $package )
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// HERE define your shipping class to find
$class = 548; //CAMDEN HARBOR CHART MUG is in shipping class
// HERE define the shipping methods you want to hide
$method_key_ids = array('printify_shipping_s', 'printify_shipping_e');
// Checking in cart items
foreach( WC()->cart->get_cart() as $cart_item )
// If we find the shipping class
if( $cart_item['data']->get_shipping_class_id() == $class )
foreach( $method_key_ids as $method_key_id )
unset($rates[$method_key_id]); // Remove the targeted methods
break; // Stop the loop
return $rates;
But it's not working and I still get 4 shipping packages instead of two:
Any help is appreciated.
php wordpress woocommerce cart shipping-method
php wordpress woocommerce cart shipping-method
edited Nov 12 '18 at 22:40
LoicTheAztec
85.2k136095
85.2k136095
asked Nov 7 '18 at 0:27
user2059376
487
487
you can't targetshipping_method_2_printify_shipping_s
as its just an html tag id… What you are targeting isprintify_shipping_s
orprintify_shipping_e
for the package ID 2. But forwoocommerce_package_rates
filter hook there is no way to target a specific package ID, so the code from my answer will not be useful in your case. I dont have the answer to your question and I can't help.
– LoicTheAztec
Nov 7 '18 at 16:36
@LoicTheAztec Thank you for your insight and quick response. Basically I just want to remove 'Shipping 3' and 'Shipping 4' imgur.com/a/2HZRaCw
– user2059376
Nov 7 '18 at 16:41
add a comment |
you can't targetshipping_method_2_printify_shipping_s
as its just an html tag id… What you are targeting isprintify_shipping_s
orprintify_shipping_e
for the package ID 2. But forwoocommerce_package_rates
filter hook there is no way to target a specific package ID, so the code from my answer will not be useful in your case. I dont have the answer to your question and I can't help.
– LoicTheAztec
Nov 7 '18 at 16:36
@LoicTheAztec Thank you for your insight and quick response. Basically I just want to remove 'Shipping 3' and 'Shipping 4' imgur.com/a/2HZRaCw
– user2059376
Nov 7 '18 at 16:41
you can't target
shipping_method_2_printify_shipping_s
as its just an html tag id… What you are targeting is printify_shipping_s
or printify_shipping_e
for the package ID 2. But for woocommerce_package_rates
filter hook there is no way to target a specific package ID, so the code from my answer will not be useful in your case. I dont have the answer to your question and I can't help.– LoicTheAztec
Nov 7 '18 at 16:36
you can't target
shipping_method_2_printify_shipping_s
as its just an html tag id… What you are targeting is printify_shipping_s
or printify_shipping_e
for the package ID 2. But for woocommerce_package_rates
filter hook there is no way to target a specific package ID, so the code from my answer will not be useful in your case. I dont have the answer to your question and I can't help.– LoicTheAztec
Nov 7 '18 at 16:36
@LoicTheAztec Thank you for your insight and quick response. Basically I just want to remove 'Shipping 3' and 'Shipping 4' imgur.com/a/2HZRaCw
– user2059376
Nov 7 '18 at 16:41
@LoicTheAztec Thank you for your insight and quick response. Basically I just want to remove 'Shipping 3' and 'Shipping 4' imgur.com/a/2HZRaCw
– user2059376
Nov 7 '18 at 16:41
add a comment |
1 Answer
1
active
oldest
votes
The problem here is related to splitting packages conflict between your two shipping plugins, when mixed items are in cart. In that case each plugin split the shipping package, which add 4 split packages instead of 2.
Those plugins are using woocommerce_cart_shipping_packages
to split the shipping packages with an unknown priority (so I will set a very high priority)
.
The following code will keep the first 2 split packages from cart (and checkout too):
add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages )
$has_printful = $has_printify = false; // Initializing
// Lopp through cart items
foreach( WC()->cart->get_cart() as $item )
// Check items for shipping class "printful"
if( $item['data']->get_shipping_class() === 'printful' )
$has_printful = true;
else
$has_printify = true;
// When cart items are mixed (using both shipping plugins)
if( $has_printful && $has_printify )
// Loop through split shipping packages
foreach( $packages as $key => $package )
// Keeping only the 2 first split shipping packages
if( $key >= 2 )
// Removing other split shipping packages
unset($packages[$key]);
return $packages;
Code goes in function.php file of your active child theme (active theme). It should works and display only two shipping packages when cart items are mixed.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53182057%2fremove-duplicated-shipping-packages-using-a-shipping-class-in-woocommerce%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The problem here is related to splitting packages conflict between your two shipping plugins, when mixed items are in cart. In that case each plugin split the shipping package, which add 4 split packages instead of 2.
Those plugins are using woocommerce_cart_shipping_packages
to split the shipping packages with an unknown priority (so I will set a very high priority)
.
The following code will keep the first 2 split packages from cart (and checkout too):
add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages )
$has_printful = $has_printify = false; // Initializing
// Lopp through cart items
foreach( WC()->cart->get_cart() as $item )
// Check items for shipping class "printful"
if( $item['data']->get_shipping_class() === 'printful' )
$has_printful = true;
else
$has_printify = true;
// When cart items are mixed (using both shipping plugins)
if( $has_printful && $has_printify )
// Loop through split shipping packages
foreach( $packages as $key => $package )
// Keeping only the 2 first split shipping packages
if( $key >= 2 )
// Removing other split shipping packages
unset($packages[$key]);
return $packages;
Code goes in function.php file of your active child theme (active theme). It should works and display only two shipping packages when cart items are mixed.
add a comment |
The problem here is related to splitting packages conflict between your two shipping plugins, when mixed items are in cart. In that case each plugin split the shipping package, which add 4 split packages instead of 2.
Those plugins are using woocommerce_cart_shipping_packages
to split the shipping packages with an unknown priority (so I will set a very high priority)
.
The following code will keep the first 2 split packages from cart (and checkout too):
add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages )
$has_printful = $has_printify = false; // Initializing
// Lopp through cart items
foreach( WC()->cart->get_cart() as $item )
// Check items for shipping class "printful"
if( $item['data']->get_shipping_class() === 'printful' )
$has_printful = true;
else
$has_printify = true;
// When cart items are mixed (using both shipping plugins)
if( $has_printful && $has_printify )
// Loop through split shipping packages
foreach( $packages as $key => $package )
// Keeping only the 2 first split shipping packages
if( $key >= 2 )
// Removing other split shipping packages
unset($packages[$key]);
return $packages;
Code goes in function.php file of your active child theme (active theme). It should works and display only two shipping packages when cart items are mixed.
add a comment |
The problem here is related to splitting packages conflict between your two shipping plugins, when mixed items are in cart. In that case each plugin split the shipping package, which add 4 split packages instead of 2.
Those plugins are using woocommerce_cart_shipping_packages
to split the shipping packages with an unknown priority (so I will set a very high priority)
.
The following code will keep the first 2 split packages from cart (and checkout too):
add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages )
$has_printful = $has_printify = false; // Initializing
// Lopp through cart items
foreach( WC()->cart->get_cart() as $item )
// Check items for shipping class "printful"
if( $item['data']->get_shipping_class() === 'printful' )
$has_printful = true;
else
$has_printify = true;
// When cart items are mixed (using both shipping plugins)
if( $has_printful && $has_printify )
// Loop through split shipping packages
foreach( $packages as $key => $package )
// Keeping only the 2 first split shipping packages
if( $key >= 2 )
// Removing other split shipping packages
unset($packages[$key]);
return $packages;
Code goes in function.php file of your active child theme (active theme). It should works and display only two shipping packages when cart items are mixed.
The problem here is related to splitting packages conflict between your two shipping plugins, when mixed items are in cart. In that case each plugin split the shipping package, which add 4 split packages instead of 2.
Those plugins are using woocommerce_cart_shipping_packages
to split the shipping packages with an unknown priority (so I will set a very high priority)
.
The following code will keep the first 2 split packages from cart (and checkout too):
add_filter( 'woocommerce_cart_shipping_packages', 'remove_split_packages_based_on_items_shipping_class', 100000, 1 );
function remove_split_packages_based_on_items_shipping_class( $packages )
$has_printful = $has_printify = false; // Initializing
// Lopp through cart items
foreach( WC()->cart->get_cart() as $item )
// Check items for shipping class "printful"
if( $item['data']->get_shipping_class() === 'printful' )
$has_printful = true;
else
$has_printify = true;
// When cart items are mixed (using both shipping plugins)
if( $has_printful && $has_printify )
// Loop through split shipping packages
foreach( $packages as $key => $package )
// Keeping only the 2 first split shipping packages
if( $key >= 2 )
// Removing other split shipping packages
unset($packages[$key]);
return $packages;
Code goes in function.php file of your active child theme (active theme). It should works and display only two shipping packages when cart items are mixed.
edited Nov 12 '18 at 22:35
answered Nov 12 '18 at 22:22
LoicTheAztec
85.2k136095
85.2k136095
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53182057%2fremove-duplicated-shipping-packages-using-a-shipping-class-in-woocommerce%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
you can't target
shipping_method_2_printify_shipping_s
as its just an html tag id… What you are targeting isprintify_shipping_s
orprintify_shipping_e
for the package ID 2. But forwoocommerce_package_rates
filter hook there is no way to target a specific package ID, so the code from my answer will not be useful in your case. I dont have the answer to your question and I can't help.– LoicTheAztec
Nov 7 '18 at 16:36
@LoicTheAztec Thank you for your insight and quick response. Basically I just want to remove 'Shipping 3' and 'Shipping 4' imgur.com/a/2HZRaCw
– user2059376
Nov 7 '18 at 16:41