Last week I got a call from Mark, a long-term client with a busy WooCommerce shop. His admin dashboard was crawling. Orders took forever to process and the frontend felt clunkier than a 2005 store. The one thing that had changed was a recent update to WooCommerce 10.4.
The previous developer had hit Update without a second thought and assumed everything was fine. Most people do. With a release the size of WooCommerce 10.4, which touches core systems and the block editor, that is how you end up with a broken store and no idea which change did it. My own first instinct was to go hunting for a rogue plugin, which is what every dev does. The problem sat lower than the plugin list.
WooCommerce 10.4 performance and stability
Releases like this one carry performance and stability work that you have to know about, because if you do not, you will spend weeks chasing bugs that are not really bugs. Start with the REST API. WooCommerce 10.4 lazy loads the wc-admin and wc-analytics namespaces. Those controllers used to load on every single REST API request and added over 100ms to response times. They now load on demand, which is a 30 to 60ms TTFB improvement on requests that never needed them. That is measurable, not marketing. On a busy store it is the difference between a backend that responds and one that stalls. The WooCommerce Developer Blog goes through the details in its 10.4 pre-release notes.
The Store API got a fix too. If you have ever had an order request blow up because someone deleted a product, you know the shape of that bug. I have hit it more than once. WooCommerce 10.4 returns safe default values instead of a fatal error, so historical order data stays readable after the products behind it are gone. Small change, and it removes an entire category of panicked client email.
Block editor changes worth reading
The block editor got real attention in this release. The “Add to Cart + Options” block now supports variations inside the Single Product block, where picking a variation used to break the rendering. It finally matches what the classic version does. The Interactivity API Mini Cart is also on by default now, replacing the older React-based mini cart, and that is a performance change rather than a label change. Both of these affect how your custom blocks and integrations behave, so skipping them means days lost to display bugs that look random.
If you build custom blocks or extend the shipped ones, look at the inner blocks first. Where you used to toggle a title or a description on and off, there are now real inner blocks. Any code that hooks into block rendering has to account for that. Here is a small example that keeps custom logic working with the new inner block structure on the “Featured Category” block after a WooCommerce 10.4 update:
<?php
/**
* Filter to ensure bbioon custom logic adapts to Featured Category inner blocks.
*
* @param array $parsed_block The parsed block array.
* @param array $source_block The raw block array from post content.
* @return array Modified parsed block array.
*/
function bbioon_adjust_featured_category_render( $parsed_block, $source_block ) {
if ( 'woocommerce/featured-category' === $parsed_block['blockName'] && ! empty( $parsed_block['innerBlocks'] ) ) {
// Example: Add a custom class to inner blocks for styling or JS.
foreach ( $parsed_block['innerBlocks'] as &$inner_block ) {
if ( in_array( $inner_block['blockName'], [ 'woocommerce/category-title', 'woocommerce/category-description' ] ) ) {
$inner_block['attrs']['className'] = ( isset( $inner_block['attrs']['className'] ) ? $inner_block['attrs']['className'] . ' ' : '' ) . 'bbioon-custom-category-element';
}
}
}
return $parsed_block;
}
add_filter( 'render_block_data', 'bbioon_adjust_featured_category_render', 10, 2 );
?>
What to do with all this
The point is not to update blindly, and that goes double for WooCommerce. Every major release, this one included, carries changes under the hood that will either speed your store up or take it down, depending on how much attention you paid. The lazy-loaded APIs and the Store API fix are worth having. The block editor changes are the ones that will make you review custom block logic line by line. Test on staging first. It is the cheapest insurance you will ever buy.
This gets complicated quickly. If you are tired of debugging someone else’s mess and want your site to just work, send my team a note. We have most likely seen your version of it.