Shipping used to be a global list of methods each carrying its own availability rules, which meant every method had to know about every country. 2.6 inverted it:…
Five filters over 30,000 variations, and a request that never returns. Replacing EAV meta joins with a denormalised index table kept in sync by product hooks.
Changing a price by filtering woocommerce_get_price alters it everywhere at once, including the catalogue and the order confirmation email — and it fires often enough to be a…
Reordering the checkout form by copying form-billing.php into the theme works and then quietly rots: every WooCommerce release that touches that template leaves your copy behind, and the…
A WooCommerce product is a post, so get_post() returns something usable and the price is right there in the meta. It is also wrong for variable products, where…
A theme override is a copy of a WooCommerce template placed in yourtheme/woocommerce/, and WooCommerce uses it in preference to its own — permanently, whatever happens upstream. 2.1…
Until 2.2, an order’s status was a term in a shop_order_status taxonomy. From 2.2 it is a custom post status with a wc- prefix, and the upgrade routine…
woocommerce_thankyou reads like a completion event and is a page-render hook. The order-received page has an ordinary URL with the order key in it, so it is bookmarked,…
A variable product with four sizes and three colours is not one row. Every combination is a product_variation post carrying its own meta, so a catalogue that reads…