✅ New cleaner syntax implemented: - [card:type] instead of [card type='type'] - [button:style](url)Text[/button] instead of [button url='...' style='...'] - Standard markdown images:  ✅ Variable protection from markdown parsing: - Variables with underscores (e.g., {order_items_table}) now protected - HTML comment placeholders prevent italic/bold parsing - All variables render correctly in preview ✅ Button rendering fixes: - Buttons work in Visual mode inside cards - Buttons work in Preview mode - Button clicks prevented in visual editor - Proper styling for solid and outline buttons ✅ Backward compatibility: - Old syntax still supported - No breaking changes ✅ Bug fixes: - Fixed order_item_table → order_items_table naming - Fixed button regex to match across newlines - Added button/image parsing to parseMarkdownBasics - Prevented button clicks on .button and .button-outline classes 📚 Documentation: - NEW_MARKDOWN_SYNTAX.md - Complete user guide - MARKDOWN_SYNTAX_AND_VARIABLES.md - Technical analysis
129 lines
3.4 KiB
Markdown
129 lines
3.4 KiB
Markdown
# Template Source of Truth
|
|
|
|
## Single Source of Truth: `/includes/Email/DefaultTemplates.php`
|
|
|
|
This file contains **clean markdown templates** without HTML tags inside shortcodes.
|
|
|
|
### Structure
|
|
|
|
```php
|
|
namespace WooNooW\Email;
|
|
|
|
class DefaultTemplates {
|
|
public static function get_all_templates() {
|
|
return [
|
|
'customer' => [
|
|
'order_placed' => '...',
|
|
'order_confirmed' => '...',
|
|
'order_shipped' => '...',
|
|
'order_completed' => '...',
|
|
'order_cancelled' => '...',
|
|
'payment_received' => '...',
|
|
'payment_failed' => '...',
|
|
'registered' => '...',
|
|
'vip_upgraded' => '...',
|
|
],
|
|
'staff' => [
|
|
'order_placed' => '...',
|
|
'order_confirmed' => '...',
|
|
'order_shipped' => '...',
|
|
'order_completed' => '...',
|
|
'order_cancelled' => '...',
|
|
'payment_received' => '...',
|
|
'payment_failed' => '...',
|
|
],
|
|
];
|
|
}
|
|
|
|
public static function get_default_subject($recipient, $event) {
|
|
// Returns subject string
|
|
}
|
|
}
|
|
```
|
|
|
|
### Template Format
|
|
|
|
Templates use **clean markdown** inside `[card]` shortcodes:
|
|
|
|
```markdown
|
|
[card type="hero"]
|
|
|
|
## Thank you for your order, {customer_name}!
|
|
|
|
We've received your order and will begin processing it right away.
|
|
[/card]
|
|
|
|
[card]
|
|
|
|
**Order Number:** #{order_number}
|
|
**Order Date:** {order_date}
|
|
**Order Total:** {order_total}
|
|
|
|
[/card]
|
|
|
|
[button url="{order_url}"]View Order Details[/button]
|
|
```
|
|
|
|
**NOT** HTML like this:
|
|
```html
|
|
[card type="hero"]
|
|
<h1>Thank you for your order, {customer_name}!</h1>
|
|
<p>We've received your order...</p>
|
|
[/card]
|
|
```
|
|
|
|
## How It's Used
|
|
|
|
### TemplateProvider.php
|
|
|
|
`/includes/Core/Notifications/TemplateProvider.php` uses the Email templates:
|
|
|
|
```php
|
|
use WooNooW\Email\DefaultTemplates as EmailDefaultTemplates;
|
|
|
|
// Get all templates
|
|
$allEmailTemplates = EmailDefaultTemplates::get_all_templates();
|
|
|
|
// Get specific template
|
|
$body = $allEmailTemplates[$recipient_type][$template_name];
|
|
$subject = EmailDefaultTemplates::get_default_subject($recipient_type, $template_name);
|
|
```
|
|
|
|
### Event ID Mapping
|
|
|
|
API event IDs are mapped to template names:
|
|
|
|
| API Event ID | Template Name |
|
|
|-------------|---------------|
|
|
| `order_processing` | `order_confirmed` |
|
|
| `new_customer` | `registered` |
|
|
| Others | Same name |
|
|
|
|
## Deprecated Files
|
|
|
|
### `/includes/Core/Notifications/DefaultEmailTemplates.php` ❌
|
|
|
|
**DO NOT USE** - This file contains old templates with HTML tags inside shortcodes.
|
|
|
|
It's kept for backwards compatibility only and is marked as deprecated.
|
|
|
|
## Frontend Conversion
|
|
|
|
When templates are loaded in the editor:
|
|
|
|
1. **Database** stores HTML (for backwards compatibility)
|
|
2. **converter.ts** converts HTML to clean markdown using `convertHtmlToMarkdown()`
|
|
3. **CodeEditor** displays clean markdown
|
|
4. **User edits** in markdown
|
|
5. **Saves** back as HTML (via blocks → HTML conversion)
|
|
|
|
This ensures smooth editing experience while maintaining compatibility.
|
|
|
|
## Benefits
|
|
|
|
✅ **Clean markdown editing** - No HTML tags in markdown mode
|
|
✅ **Single source of truth** - One place to update templates
|
|
✅ **Better UX** - Markdown toolbar and syntax highlighting
|
|
✅ **Mobile-friendly** - Easy to type on any device
|
|
✅ **Maintainable** - Clear separation of concerns
|