Features:
- Fetch competitor benchmark prices from Google Price Competitiveness Report
- New get_all_benchmark_prices() method in Google API class
- Display competitor price instead of own Google price
- Calculate recommended price (slightly below competitor)
- Show potential gain/loss per product if price is optimized
- Color-coded status:
- Green: Your price is cheaper (opportunity to increase)
- Blue: Competitive (within 2% of competitor)
- Red: Expensive (above competitor)
- Summary statistics showing:
- Products with benchmark data
- Count by status (cheaper/competitive/expensive)
- Total potential gain if all prices optimized
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Based on actual API response analysis:
- offerId is at top level (e.g., "220216" = WooCommerce product ID)
- gtin is nested in attributes.gtin as an ARRAY (e.g., ["850018802833"])
- price is nested in attributes.price.amountMicros
Changes:
- Index Google products by each GTIN in the attributes.gtin array
- Also check attributes.gtins (alternative field name)
- Index by MPN if available
- Update find_product_by_identifier to check array GTINs with in_array()
- Fix price extraction to check attributes.price first, then top-level
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Match products where WooCommerce SKU is stored as GTIN in Google
- Also search Reports API by GTIN when SKU looks like a barcode
- Supports stores that use barcodes (UPC/EAN) as their SKU
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace service account authentication with OAuth 2.0 user flow
- Add "Authorize with Google" button in admin settings
- Handle OAuth callback and token exchange
- Store refresh token for automatic access token renewal
- Add revoke authorization functionality
- Update admin UI to show authorization status
- Update price updater to use new OAuth credentials
- Add CSRF protection with state parameter
This change supports organizations that have disabled service account
key creation via iam.disableServiceAccountKeyCreation policy.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix ISE 500 error on plugin activation:
- Defer wc_get_logger() call in Logger class (lazy initialization)
- Move plugin init to plugins_loaded hook with priority 20
- Remove invalid Google_Service_ShoppingContent_Reports instantiation
- Migrate from deprecated Content API to new Merchant API:
- Rewrite Google API class with direct REST calls
- Implement JWT authentication using PHP OpenSSL
- Use WordPress wp_remote_* functions for HTTP requests
- Support Price Competitiveness reports for competitor pricing
- Remove all Composer dependencies:
- Delete vendor/ directory (~50 packages)
- Delete composer.json and composer.lock
- Remove setup scripts and related documentation
- Plugin is now fully self-contained with no external dependencies
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>