Critical regression in WPC Product Bundles Premium 8.6.5 – EPO option prices lost in cart
Add a Reply
You must be logged in to reply to this ticket.
Hello,
thank you for providing version 8.7.7.2.
We have now tested the new version thoroughly without our temporary compatibility workaround, including cart, checkout, order backend and quantities greater than 1. Everything is working correctly and the option prices are now calculated as expected.
I also reviewed the change itself, and I am very pleased to see that the issue was not simply worked around, but addressed properly in the pricing logic. The new check for a complete pricing context before repricing bundle parents is exactly the kind of internal guard we had in mind based on our debugging. In particular, the additional woosb_has_pricing_contextfilter also looks like a clean and extensible solution.
So from a technical point of view, I am very satisfied with the fix, and I appreciate that you ultimately implemented it properly.
The only point I would like to mention is the time it took to get there. From the initial report to the working fix, more than five weeks passed. For a regression that can silently result in incorrect order prices, this is already quite a long time. The situation was made more uncomfortable by the fact that a security-related update had been released in the meantime, while we were still unable to update safely because of this compatibility issue.
I fully understand that reproducing third-party compatibility issues can take time, but for a pricing-related bug of this severity I would have appreciated a faster technical assessment or at least an earlier confirmation that the issue had been accepted and forwarded to development.
That said, I am glad that the issue has now been resolved cleanly, and I would like to thank you and your developers for the final implementation.
Best regards.
Oh, I am very sorry. We received your error report and the detailed fix, but we didn't include it in our recent updates.
Please download the 8.7.7.2 update; I will send it to you in a private reply shortly. I just fixed it.
Your last response was on October 14 and included an incorrect recommendation, along with a note that I no longer have Premium Support.
Am I really being ignored just because I reported a bug in your plugin without Premium Support and want to see it fixed? I don't have a question about installing or using the plugin; I've reported a major bug that has already cost me a three-digit amount due to incorrect price calculations!
That’s not how you treat customers!
And yes, something was apparently changed in the new version, but the bug wasn’t fully fixed. Only the first two EPO products are now calculated correctly; all subsequent ones still aren’t (s. screenshots).
I would be very grateful if you could keep the lines of communication open here and clearly explain what steps have been taken to resolve the issue. I would also be happy to assist you with further testing.
But ghosting isn't the right thing to do.
Clarification regarding the proposed fix:
In my previous message, I may have phrased this too strongly by suggesting that WPC should implement “this fix”.
To clarify: I do not mean that WPC should copy our workaround as-is.
Our workaround is intentionally an external compatibility patch. It temporarily removes incomplete woosb_* metadata before WPC performs its price recalculation and restores it afterwards. This works reliably in our tests, including cart, checkout and order backend, but it is still a workaround around WPC’s internal pricing logic.
What I meant is that WPC should implement a proper internal fix based on the findings from our debugging.
The core issue appears to be that cart items with woosb_ids but without a complete pricing context can still be treated as bundle parents and repriced. In our case, EPO-generated option items are therefore reset to zero.
From our perspective, the correct upstream solution would be to add an appropriate guard inside WPC’s own pricing logic so that a cart item is only repriced as a bundle parent when its bundle pricing context is complete and valid, for example when woosb_fixed_price is explicitly set or a valid woosb_bundle['pricing_mode'] exists.
So the workaround should be seen as a proof of cause and proof of concept, not as the implementation we recommend for WPC itself.
We have now identified the regression more precisely and were able to create a working proof-of-concept workaround.
In V.8.6.5 (and following till V.8.7.6), EPO-generated option items can contain woosb_ids and a partial woosb_bundle structure with role => parent, but without a complete pricing context (woosb_fixed_price / pricing_mode).
WPC Product Bundles 8.6.5 then appears to treat these incomplete items as normal auto-priced bundle parents during woocommerce_before_calculate_totals and resets their price to zero.
In our case, the affected EPO option items still had their correct prices immediately before WPC recalculation:
- €3
- €7
- €3
- €5
After WPC recalculation, all of them became €0.
We tested a workaround that temporarily removes the incomplete WPC bundle metadata from those EPO-generated items before WPC runs, and restores it afterwards.
With this workaround enabled, the cart is calculated correctly again:
- base price: €64.90
- option prices: €3 + €7 + €3 + €5
- final total: €82.90
The individual option prices are also shown correctly in the cart again.
This strongly suggests that 8.6.5 should not reprice cart items as bundle parents unless they have a complete and valid pricing context.
A possible upstream fix would therefore be to add a guard condition before repricing bundle parents, e.g. only process them when woosb_fixed_price is explicitly set or a valid woosb_bundle['pricing_mode'] exists.
We are happy to provide the proof-of-concept code we used:
/**
* Compatibility workaround:
* WPC Product Bundles 8.6.5 + ThemeComplete EPO
*
* WPC Product Bundles 8.6.5 can treat EPO-generated bundle option items
* as regular auto-priced bundle parents when they contain `woosb_ids`
* but no explicit pricing mode / fixed-price flag.
*
* This temporarily removes the incomplete WPC bundle metadata before
* WPC recalculates cart prices, then restores it afterwards.
*/
$GLOBALS['frixtender_woosb_epo_meta'] = [];
add_action( 'woocommerce_before_calculate_totals', function ( $cart ) {
if ( ! $cart || empty( $cart->cart_contents ) ) {
return;
}
$GLOBALS['frixtender_woosb_epo_meta'] = [];
foreach ( $cart->cart_contents as $cart_item_key => &$cart_item ) {
// Only items that look like bundle parents,
// but do not have a complete pricing context.
if (
empty( $cart_item['woosb_ids'] )
|| isset( $cart_item['woosb_fixed_price'] )
|| ! empty( $cart_item['woosb_bundle']['pricing_mode'] )
) {
continue;
}
$GLOBALS['frixtender_woosb_epo_meta'][ $cart_item_key ] = [
'woosb_ids' => $cart_item['woosb_ids'] ?? null,
'woosb_bundle' => $cart_item['woosb_bundle'] ?? null,
'woosb_group_key' => $cart_item['woosb_group_key'] ?? null,
];
unset( $cart_item['woosb_ids'] );
unset( $cart_item['woosb_bundle'] );
unset( $cart_item['woosb_group_key'] );
unset( $cart_item['woosb_price'] );
}
unset( $cart_item );
}, 9998 );
add_action( 'woocommerce_before_calculate_totals', function ( $cart ) {
if (
! $cart
|| empty( $GLOBALS['frixtender_woosb_epo_meta'] )
) {
return;
}
foreach ( $GLOBALS['frixtender_woosb_epo_meta'] as $cart_item_key => $meta ) {
if ( ! isset( $cart->cart_contents[ $cart_item_key ] ) ) {
continue;
}
foreach ( $meta as $meta_key => $value ) {
if ( $value !== null ) {
$cart->cart_contents[ $cart_item_key ][ $meta_key ] = $value;
}
}
unset( $cart->cart_contents[ $cart_item_key ]['woosb_price'] );
}
}, 10000 );
We've now spent hours trying to fix a bug in a paid plugin and we would be very pleased and grateful if the fix could be reviewed as soon as possible and included in the next release.
Best regards.
I compared with the help of ChatGPT the public Free versions 8.6.4 and 8.6.5 directly at source-code level.
The differences are much more extensive than the changelog entry for 8.6.5 (“Updated: WPML compatibility”) suggests.
In particular, the cart and bundle pricing logic in includes/class-woosb.php was substantially reworked:
- a new structured
woosb_bundlecontext was introduced for parent/child bundle items - bundle instances now use a new
woosb_group_key before_calculate_totals()was significantly rewritten- automatic pricing now recalculates child prices in a separate processing pass
- bundle child prices are explicitly reset again with
set_price() - fixed discounts are now allocated proportionally across child items
- additional bundle/session synchronization logic was introduced
- new WPML cart synchronization logic was added at priority 9998
Most importantly, in version 8.6.4 the automatic bundle parent price was set using:
apply_filters( 'woosb_bundles_price', $bundles_price, $cart_item )
In version 8.6.5, this filter is no longer used when setting the bundle parent price.
This is especially relevant because the compatibility snippet you previously provided to us uses exactly this filter:
add_filter( 'woosb_bundles_price', ... )
Since this filter is no longer executed in the relevant pricing path in 8.6.5, this also explains why the suggested compatibility snippet did not change the behaviour.
ThemeComplete EPO stores its calculated option price in cart-item data such as tm_epo_options_prices and modifies the WooCommerce product price accordingly. The rewritten WPC Product Bundles pricing routine in 8.6.5 appears to overwrite or bypass this adjusted price during woocommerce_before_calculate_totals.
This matches all of our tests:
- 8.6.4 + EPO: working
- 8.6.5 + EPO: option prices become €0.00 in the cart
- rollback to 8.6.4: immediately working again
- changing from fixed price to automatic price: does not solve the issue
I would therefore ask you to specifically review the changes to before_calculate_totals() and the removal/bypassing of the woosb_bundles_price filter between 8.6.4 and 8.6.5.
I also have a question regarding the changelog:
Version 8.6.5 is documented only as “Updated: WPML compatibility”, although the source contains substantial changes to the bundle structure, session handling and cart pricing logic.
Could you please explain why these major internal pricing changes were not mentioned in the changelog?
For a WooCommerce extension that directly affects order totals, such changes are highly relevant for testing and compatibility checks.
BTW: I tried your solution/fix in one product in our test shop, regardless that the product price is wrong, it didn't fix the problem, see screenshot.
Yes, we are intentionally using a fixed bundle price. This configuration has been working correctly for a long time, including with WPC Product Bundles Premium 8.6.4.
The important point is that the exact same configuration behaves differently in 8.6.5:
- 8.6.4: fixed bundle price + ThemeComplete EPO works correctly
- 8.6.5: EPO additional prices are reset to €0.00 in the cart
- rollback to 8.6.4 immediately restores the correct behaviour
I understand that with a fixed bundle price the bundled sub-products may internally have a price of zero. However, this was already the case in 8.6.4 and did not interfere with EPO prices.
Therefore, switching our products to automatic pricing would only be a workaround and would require us to change our pricing model. It does not address the regression introduced in 8.6.5.
Fixed/manual bundle pricing is an officially supported feature of WPC Product Bundles. I therefore believe this should be treated as a bug report rather than a configuration or premium support issue.
There is another important aspect: since version 8.6.4, there has also been a security-related update. At the moment, we are forced to stay on 8.6.4 because of this regression, which means we cannot benefit from the security fix included in the newer version. We would therefore very much appreciate a fix that allows us to update to a current and secure version without breaking the EPO price calculation.
Could you please compare the pricing/cart-related changes between 8.6.4 and 8.6.5 and investigate why the EPO additional prices are now being overwritten?
It seems you have set a fixed price for the bundle, right? In that case, the sub-products' prices are set to zero, which could be causing the issue you mentioned.
Please set an automatic price for the bundle and try again.
I also want to let you know that the premium support period for your WPC Product Bundles — Single site (purchased on May 6, 2025) has expired. To continue receiving support, please renew your license as soon as possible.
I'm not sure if the answer really addresses my question, because I think I mentioned that even the latest security update doesn't solve my problem.
The latest update, 8.7.5 still contains the bug.
We’d also like to receive an update as soon as possible that patches the security vulnerability, because it’s not a good feeling to have a vulnerable plugin in the store — it’s very problematic. Unfortunately, we can’t use it because it still calculates prices incorrectly; see the screenshot.
You should verify your license at WP-admin >> WPClever >> License Keys to receive update notifications and update the plugin directly from the website backend.
Hi,
Now that a security update has been released and we still can't update, I'd like to bring our problem to your attention once again!
How can we find a solution? Have you contacted Extra Product Options support yet?
Best regards
Joerg
Sorrily neither the snippet, nor the new plugin version did work properly, the bug remains.
I know it doesn't matter too much, but here's a Screenshot of a product priced out an then in the cart...
Thank you. I tried the code, but it didn’t change the described behavior.
Please add the custom code below (How to add custom code? ↗):
add_filter( 'woosb_bundles_price', function ( $bundles_price, $cart_item ) {
if ( isset( $cart_item['tm_epo_options_prices'] ) ) {
$bundles_price += (float) $cart_item['tm_epo_options_prices'];
}
return $bundles_price;
}, 99, 2 );
add_filter( 'woosb_bundles_display_price', function ( $bundles_display_price, $cart_item ) {
if ( isset( $cart_item['tm_epo_options_prices'] ) ) {
$bundles_display_price += (float) $cart_item['tm_epo_options_prices'];
}
return $bundles_display_price;
}, 99, 2 );
Let me know if it works.
Hi,
here is the homepage of the plugin:
https://themecomplete.com/extra-product-options/
I don't think, there is a free version available, so I think I'm not allowed to share the files. But maybe they give you as a developer a version for testing purposes.
Best regards
Joerg
Could you provide me with the installation file for the "ThemeComplete EPO" plugin you mentioned? I don't have that plugin.
Hi,
unfortunately, we cannot provide access to our production or staging environment due to GDPR and data protection requirements.
However, the issue is clearly reproducible on our side:
- WPC Product Bundles Premium 8.6.4: works correctly
- WPC Product Bundles Premium 8.6.5: ThemeComplete EPO option prices are lost in the cart and shown as €0.00
- rolling back to 8.6.4 immediately fixes the issue
The issue occurs consistently and does not depend on APCu or WooCommerce transients.
Since this regression is specifically caused by the update from 8.6.4 to 8.6.5, could you please first review the changes introduced in 8.6.5 that affect cart pricing, product prices or WooCommerce price hooks?
We are happy to provide screenshots, logs, plugin configuration details or test results, but we cannot provide administrative access to a system containing customer data.
Best regards
Jörg
Hi FriXtender,
Please send me your website credentials (wp-admin link, username, and password) or create a dev/staging site with an identical configuration so I can investigate any issues.
Hello WPClever Support,
we have identified a critical regression in WPC Product Bundles Premium 8.6.5.
We use ThemeComplete Extra Product Options (EPO) together with WPC Product Bundles Premium. With version 8.6.4, all additional option prices were calculated correctly. After updating to 8.6.5, the issue started.
The problem is as follows:
- extra-cost options are calculated correctly on the product page
- after adding the product to the cart, the selected options are still listed
- however, their calculated prices are shown as €0.00
- as a result, only the base product price is charged
Example:
- Base product price: €64.90
- Several paid options selected
- Product page total: calculated correctly
- Cart: selected options are present, but all additional prices are €0.00
- Cart total therefore only includes the base price
We have already ruled out caching issues:
- APCu disabled
- WooCommerce transients cleared
- same issue occurs in our test shop without APCu
We then rolled back WPC Product Bundles Premium from 8.6.5 to 8.6.4.
After the rollback, the problem disappeared immediately and the EPO option prices are calculated correctly in the cart again.
We therefore consider this issue to be directly caused by the update from 8.6.4 to 8.6.5.
This is a production-critical issue for us, as it leads to incorrect order totals and already lead to financial loss.
Could you please investigate this regression and provide a fix?
If required, we can provide:
- screenshots
- affected product configuration details
- relevant error logs or debug information
Thank you.
Best regards
Jörg




