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:
dwindown
2025-11-10 11:40:49 +07:00
parent 8bebd3abe5
commit c1f09041ef
2 changed files with 335 additions and 3 deletions

View File

@@ -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