docs: Shipping field hooks + Tax selling locations strategy
## ✅ Issue #1: Shipping Fields - Addon Responsibility Created SHIPPING_FIELD_HOOKS.md documenting: **The Right Approach:** - ❌ NO hardcoding (if country === ID → show subdistrict) - ✅ YES listen to WooCommerce hooks - ✅ Addons declare their own field requirements **How It Works:** 1. Addon adds field via `woocommerce_checkout_fields` filter 2. WooNooW fetches fields via API: `GET /checkout/fields` 3. Frontend renders fields dynamically 4. Validation based on `required` flag **Benefits:** - Addon responsibility (not WooNooW) - No hardcoding assumptions - Works with ANY addon (Indonesian, UPS, custom) - Future-proof and extensible **Example:** ```php // Indonesian Shipping Addon add_filter('woocommerce_checkout_fields', function($fields) { $fields['shipping']['shipping_subdistrict'] = [ 'required' => true, // ... ]; return $fields; }); ``` WooNooW automatically renders it! ## ✅ Issue #2: Tax - Grab Selling Locations Updated TAX_SETTINGS_DESIGN.md: **Your Brilliant Idea:** - Read WooCommerce "Selling location(s)" setting - Show predefined tax rates for those countries - No re-selecting! **Scenarios:** 1. **Specific countries** (ID, MY) → Show both rates 2. **All countries** → Show store country + add button 3. **Continent** (Asia) → Suggest all Asian country rates **Smart Detection:** ```php $selling_locations = get_option('woocommerce_allowed_countries'); if ($selling_locations === 'specific') { $countries = get_option('woocommerce_specific_allowed_countries'); // Show predefined rates for these countries } ``` **Benefits:** - Zero re-selection (data already in WooCommerce) - Smart suggestions based on user's actual selling regions - Scales for single/multi-country/continent - Combines your idea + my proposal perfectly! ## Next: Implementation Plan Ready
This commit is contained in:
@@ -48,9 +48,42 @@ Tax Settings Page
|
||||
|
||||
---
|
||||
|
||||
## Predefined Tax Rates by Country
|
||||
## Predefined Tax Rates - Smart Detection
|
||||
|
||||
When user's store country is set, we show the standard rate:
|
||||
**Source:** WooCommerce General Settings → "Selling location(s)"
|
||||
|
||||
### Scenario 1: Sell to Specific Countries
|
||||
If user selected specific countries (e.g., Indonesia, Malaysia):
|
||||
```
|
||||
Predefined Tax Rates
|
||||
├── 🇮🇩 Indonesia: 11% (PPN)
|
||||
└── 🇲🇾 Malaysia: 6% (SST)
|
||||
```
|
||||
|
||||
### Scenario 2: Sell to All Countries
|
||||
If user selected "Sell to all countries":
|
||||
```
|
||||
Predefined Tax Rates
|
||||
└── Based on store country:
|
||||
🇮🇩 Indonesia: 11% (PPN)
|
||||
|
||||
Additional Tax Rates
|
||||
└── [+ Add Tax Rate] → Shows all countries
|
||||
```
|
||||
|
||||
### Scenario 3: Sell to Specific Continents
|
||||
If user selected "Asia":
|
||||
```
|
||||
Suggested Tax Rates (Asia)
|
||||
├── 🇮🇩 Indonesia: 11%
|
||||
├── 🇲🇾 Malaysia: 6%
|
||||
├── 🇸🇬 Singapore: 9%
|
||||
├── 🇹🇭 Thailand: 7%
|
||||
├── 🇵🇭 Philippines: 12%
|
||||
└── 🇻🇳 Vietnam: 10%
|
||||
```
|
||||
|
||||
### Standard Tax Rates by Country
|
||||
|
||||
| Country | Standard Rate | Note |
|
||||
|---------|---------------|------|
|
||||
@@ -124,7 +157,23 @@ Add Tax Rate
|
||||
- `POST /settings/tax/rates` - Create tax rate
|
||||
- `PUT /settings/tax/rates/{id}` - Update tax rate
|
||||
- `DELETE /settings/tax/rates/{id}` - Delete tax rate
|
||||
- `GET /settings/tax/predefined` - Get predefined rates by country
|
||||
- `GET /settings/tax/suggested` - Get suggested rates based on selling locations
|
||||
|
||||
### Get Selling Locations:
|
||||
```php
|
||||
// Get WooCommerce selling locations setting
|
||||
$selling_locations = get_option('woocommerce_allowed_countries');
|
||||
// Options: 'all', 'all_except', 'specific'
|
||||
|
||||
if ($selling_locations === 'specific') {
|
||||
$countries = get_option('woocommerce_specific_allowed_countries');
|
||||
// Returns array: ['ID', 'MY', 'SG']
|
||||
}
|
||||
|
||||
// Get store base country
|
||||
$store_country = get_option('woocommerce_default_country');
|
||||
// Returns: 'ID:JB' (country:state) or 'ID'
|
||||
```
|
||||
|
||||
### Predefined Rates Data:
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user