v1.2.0 - Fix product selection, cart pricing, admin tabs + CI/CD

Fix three critical bugs that persisted through v1.1.11-v1.1.14:

- Product selection always empty: meta_query checked _product_type in
  postmeta, but WooCommerce uses the product_type taxonomy. Replaced
  with correct tax_query using NOT IN operator.
- Cart price always 0.00: composable_price_calculated flag persisted
  in session, preventing recalculation on page loads. Removed flag;
  static variable already handles per-request dedup.
- Admin tabs both visible on load: JS now triggers WooCommerce native
  tab click instead of manually toggling panel visibility.

Add Gitea CI/CD release workflow triggered on v* tags.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-01 12:01:20 +01:00
parent 29a68b0be4
commit 6507f4d8bb
68 changed files with 351 additions and 82 deletions

View File

@@ -5,6 +5,45 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.2.0] - 2026-03-01
### Fixed
- **CRITICAL**: Product selection always empty regardless of configuration (categories, tags, or SKUs)
- Root cause: Product query used a `meta_query` checking `_product_type` in `wp_postmeta`, but WooCommerce stores product types in the `product_type` **taxonomy** — the `!=` comparison with a non-existent meta key caused an INNER JOIN returning zero results
- Fix: Replaced broken `meta_query` with correct `tax_query` using `product_type` taxonomy to exclude composable products
- **CRITICAL**: Cart price always 0.00 despite correct frontend price calculation
- Root cause: `composable_price_calculated` flag was persisted to the cart session, preventing price recalculation on subsequent page loads — but `set_price()` only modifies the in-memory product object and is lost between requests
- Fix: Removed per-item session flag; the existing static `$already_calculated` flag already prevents duplicate calculation within a single request
- **Admin tab rendering**: Both General and Composable Options panels visible on initial page load
- Root cause: JavaScript manually showed `#composable_product_data` via `.show()` without hiding the General panel
- Fix: Trigger WooCommerce's native tab click instead, so the tab system handles panel visibility correctly
### Added
- **Gitea CI/CD release workflow** (`.gitea/workflows/release.yml`)
- Triggered on `v*` tags
- Installs PHP 8.3 with production Composer dependencies
- Compiles `.po``.mo` translations
- Verifies plugin version matches tag
- Builds release ZIP with proper WordPress directory structure
- Generates SHA-256 checksums
- Verifies package contains main plugin file and vendor directory
- Extracts changelog for release notes
- Creates Gitea release with attachments via API
### Removed
- Debug logging from v1.1.14 (no longer needed after root cause identified)
### Technical
- Modified files: includes/Product_Type.php, includes/Cart_Handler.php, assets/js/admin.js
- New file: .gitea/workflows/release.yml
- Product query now correctly uses `tax_query` with `product_type` taxonomy (`NOT IN` operator)
- Cart price recalculated on every request via `woocommerce_before_calculate_totals` hook
- Admin JS uses `$('ul.product_data_tabs li.composable_options a').trigger('click')` for native WooCommerce tab handling
## [1.1.14] - 2025-12-31
### Added