תיעוד סכמת מסד נתונים
קהל יעד: מפתחים בכירים
גרסה: 1.0.0
עדכון אחרון: דצמבר 2024
סקירה כללית
WooAI Chatbot Pro מיישם אסטרטגיית שמירת נתונים היברידית המשלבת טבלאות MySQL מותאמות לנתוני עסקאות בנפח גבוה עם מנגנונים מקוריים של WordPress (options, transients, post meta) להגדרות ו-caching.
פילוסופיית ארכיטקטורה
| סוג נתונים | מנגנון אחסון | נימוק |
|---|---|---|
| אירועים בתדירות גבוהה | טבלאות מותאמות | ביצועים, אינדוקס, פעולות bulk |
| מצב session | טבלאות מותאמות | שאילתות מורכבות, טיפול בפקיעת תוקף |
| embeddings וקטוריים | טבלאות מותאמות + Supabase | fallback מקומי, RAG חיצוני |
| הגדרות | wp_options |
מקורי ל-WordPress, טעינה אוטומטית |
| Caching | Transients | תמיכה ב-TTL, אינטגרציית object cache |
| הגדרות Playbook | Custom Post Type | REST API, אינטגרציית WordPress UI |
דיאגרמת ישויות-קשרים
+------------------+
| wp_posts |
| (waa_playbook) |
+--------+---------+
|
| playbook_id
v
+------------------+ session_id +------------------+
| wp_waa_events |<---------------->| wp_waa_sessions |
+------------------+ +--------+---------+
| id (PK) | | id (PK) |
| session_id (FK) | | session_id (UK) |
| event_type | | user_id (FK) |
| event_data | | ai_provider |
| user_id (FK) | | expires_at |
| timestamp | +------------------+
+------------------+ |
| session_id
v
+----------------------+
| wp_waa_playbook_ |
| sessions |
+----------------------+
| id (PK) |
| session_id (FK) |
| playbook_id (FK) |
| current_step_index |
| status (ENUM) |
+----------------------+
+------------------+ +------------------+
| wp_waa_vector_ | | wp_waa_rag_index |
| index | +------------------+
+------------------+ | id (PK) |
| id (PK) | | content_type |
| product_id (FK) | sync/fallback | content_id (FK) |
| embedding_id |<---------------->| embedding_vector |
| embedding_model | | metadata_json |
| metadata_json | +------------------+
+------------------+
+------------------+
| wp_waa_overrides |
+------------------+
| id (PK) |
| override_type |
| entity_id |
| settings_json |
| created_by (FK) |
+------------------+
טבלאות מותאמות
כל הטבלאות משתמשות בקידומת טבלאות של WordPress (בדרך כלל wp_) ונוצרות דרך dbDelta() למיגרציות בטוחות ו-idempotent.
wp_waa_events
מטרה: מעקב אחר אירועים בתדירות גבוהה לאנליטיקה של KPI וניתוח משפך המרה.
CREATE TABLE {prefix}waa_events (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
session_id VARCHAR(255) NOT NULL,
event_type VARCHAR(50) NOT NULL,
event_data LONGTEXT,
user_id BIGINT(20) UNSIGNED NULL,
timestamp DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_session (session_id),
KEY idx_type (event_type),
KEY idx_timestamp (timestamp),
KEY idx_user (user_id)
) {charset_collate};
מפרטי עמודות
| עמודה | סוג | Nullable | תיאור |
|---|---|---|---|
id |
BIGINT UNSIGNED | לא | מפתח ראשי אוטומטי |
session_id |
VARCHAR(255) | לא | הפניה ל-chat session (פורמט UUID) |
event_type |
VARCHAR(50) | לא | סיווג אירוע (ראו סוגי אירועים למטה) |
event_data |
LONGTEXT | כן | payload של JSON עם נתונים ספציפיים לאירוע |
user_id |
BIGINT UNSIGNED | כן | מזהה משתמש WordPress (NULL לאורחים) |
timestamp |
DATETIME | לא | זמן התרחשות אירוע (פורמט MySQL) |
סוגי אירועים
// אירועי ליבה
'chat_started' // אתחול Session
'message_sent' // הודעת משתמש נשלחה
'message_received' // תגובת AI נמסרה
'chat_ended' // סיום Session
// אירועי המרה
'product_clicked' // לחיצה על קישור מוצר
'product_viewed' // צפייה בפרטי מוצר
'cart_added' // מוצר נוסף לעגלה
'checkout_started' // התחלת checkout
'order_completed' // רכישה הושלמה
// אירועי engagement
'playbook_started' // זרימה מודרכת התחילה
'playbook_completed'// זרימה מודרכת הסתיימה
'rating_submitted' // משוב משתמש התקבל
אסטרטגיית אינדקס
| אינדקס | עמודות | מטרה |
|---|---|---|
PRIMARY |
id |
זיהוי שורה ייחודי |
idx_session |
session_id |
שליפת אירועי session |
idx_type |
event_type |
אגרגציה לפי סוג אירוע |
idx_timestamp |
timestamp |
שאילתות טווח זמן, ניקוי |
idx_user |
user_id |
ניתוח פעילות משתמש |
מדיניות שמירה
אירועים ישנים מ-90 יום נמחקים אוטומטית דרך ניקוי מתוזמן:
// מבוצע יומית דרך wp-cron
$database->clear_old_events( 90 );
דוגמת נתונים
{
"id": 12847,
"session_id": "550e8400-e29b-41d4-a716-446655440000",
"event_type": "product_clicked",
"event_data": {
"product_id": 1234,
"product_name": "Wireless Headphones",
"price": 79.99,
"source": "ai_recommendation"
},
"user_id": 42,
"timestamp": "2025-12-15 14:32:18"
}
wp_waa_sessions
מטרה: אחסון מתמיד עבור chat sessions עם היסטוריית שיחה מלאה ונתוני הקשר.
CREATE TABLE {prefix}waa_sessions (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
session_id VARCHAR(255) NOT NULL,
user_id BIGINT(20) UNSIGNED NULL,
conversation_history LONGTEXT,
context_data LONGTEXT,
ai_provider VARCHAR(50),
model_used VARCHAR(100),
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
expires_at DATETIME,
PRIMARY KEY (id),
UNIQUE KEY unique_session (session_id),
KEY idx_user (user_id),
KEY idx_created (created_at),
KEY idx_expires (expires_at)
) {charset_collate};
מפרטי עמודות
| עמודה | סוג | Nullable | תיאור |
|---|---|---|---|
id |
BIGINT UNSIGNED | לא | מפתח ראשי אוטומטי |
session_id |
VARCHAR(255) | לא | מזהה session ייחודי (UUID) |
user_id |
BIGINT UNSIGNED | כן | מזהה משתמש WordPress (NULL לאורחים) |
conversation_history |
LONGTEXT | כן | מערך JSON של אובייקטי הודעות |
context_data |
LONGTEXT | כן | אובייקט JSON עם עגלה, מוצרים שנצפו וכו’ |
ai_provider |
VARCHAR(50) | כן | ספק פעיל: gemini, claude, openai |
model_used |
VARCHAR(100) | כן | מודל ספציפי: gemini-2.5-flash-lite |
created_at |
DATETIME | לא | חותמת זמן יצירת session |
updated_at |
DATETIME | לא | חותמת זמן פעילות אחרונה |
expires_at |
DATETIME | כן | פקיעת תוקף session (NULL = ללא פקיעה) |
מחזור חיי Session
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ CREATED │────>│ ACTIVE │────>│ EXPIRED │
└─────────────┘ └─────────────┘ └─────────────┘
│
v
┌─────────────┐
│ CLEANED │
└─────────────┘
- Created: Session אותחל בהודעת משתמש ראשונה
- Active: הודעות מוחלפות,
updated_atמתרענן - Expired:
expires_atעבר (ברירת מחדל: שעה של חוסר פעילות) - Cleaned: הוסר על ידי משימת ניקוי מתוזמנת
טיפול בפקיעת תוקף
// משך session ברירת מחדל
$expires_at = gmdate( 'Y-m-d H:i:s', strtotime( '+1 hour' ) );
// ניקוי sessions שפג תוקפם
$deleted_count = $database->clear_expired_sessions();
מבנה נתוני הקשר
{
"cart_items": [
{"product_id": 123, "quantity": 2, "price": 29.99}
],
"viewed_products": [456, 789, 123],
"current_page": "product",
"current_product_id": 456,
"user_preferences": {
"language": "en",
"currency": "USD"
}
}
wp_waa_vector_index
מטרה: מיפוי מוצרי WooCommerce ל-vector embeddings חיצוניים המאוחסנים ב-Supabase pgvector.
CREATE TABLE {prefix}waa_vector_index (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
product_id BIGINT(20) UNSIGNED NOT NULL,
embedding_id VARCHAR(255),
embedding_model VARCHAR(100),
metadata_json LONGTEXT,
indexed_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_product (product_id),
KEY idx_embedding (embedding_id),
KEY idx_indexed (indexed_at)
) {charset_collate};
מפרטי עמודות
| עמודה | סוג | Nullable | תיאור |
|---|---|---|---|
id |
BIGINT UNSIGNED | לא | מפתח ראשי אוטומטי |
product_id |
BIGINT UNSIGNED | לא | מזהה מוצר WooCommerce |
embedding_id |
VARCHAR(255) | כן | UUID של רשומת וקטור Supabase |
embedding_model |
VARCHAR(100) | כן | מודל בשימוש: text-embedding-3-small |
metadata_json |
LONGTEXT | כן | metadata מוצר ב-cache לחיפוש |
indexed_at |
DATETIME | לא | חותמת זמן סנכרון אחרון |
קשר עם Supabase
WordPress (wp_waa_vector_index) Supabase (embeddings table)
+---------------------------+ +---------------------------+
| product_id: 123 | | id: uuid-abc-123 |
| embedding_id: uuid-abc-123|<----->| embedding: [0.12, 0.34...]|
| metadata_json: {...} | | content: "Product desc" |
+---------------------------+ +---------------------------+
wp_waa_overrides
מטרה: אחסון התאמות אישיות שהוגדרו על ידי מנהל עבור playbooks, נושאים והתנהגות קידום מכירות.
CREATE TABLE {prefix}waa_overrides (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
override_type VARCHAR(50) NOT NULL,
entity_id VARCHAR(100) NOT NULL,
settings_json LONGTEXT,
created_by BIGINT(20) UNSIGNED,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_type (override_type),
KEY idx_entity (entity_id),
KEY idx_type_entity (override_type, entity_id),
KEY idx_created_by (created_by)
) {charset_collate};
סוגי Override
| סוג | פורמט Entity ID | מקרה שימוש |
|---|---|---|
playbook |
מזהה post של Playbook | התנהגות playbook מותאמת |
topic |
slug נושא | הוראות AI ספציפיות לנושא |
promotion |
מזהה מוצר/קטגוריה | הגדרות הגברת קידום |
category |
מזהה קטגוריה WC | הקשר AI ברמת קטגוריה |
דוגמת Settings JSON
{
"priority_boost": 10,
"custom_prompt": "Always mention free shipping...",
"enabled_pages": ["shop", "product"],
"excluded_products": [123, 456]
}
wp_waa_rag_index
מטרה: fallback של vector embeddings מקומי כאשר Supabase לא זמין או להתקנות on-premise.
CREATE TABLE {prefix}waa_rag_index (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
content_type VARCHAR(50) NOT NULL,
content_id BIGINT(20) UNSIGNED NOT NULL,
content_text LONGTEXT,
embedding_vector LONGTEXT,
metadata_json LONGTEXT,
indexed_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_content (content_type, content_id),
KEY idx_type (content_type),
KEY idx_indexed (indexed_at)
) {charset_collate};
סוגי תוכן
| סוג | תיאור |
|---|---|
product |
מוצר WooCommerce |
page |
עמוד WordPress |
post |
פוסט WordPress |
category |
קטגוריית מוצר |
faq |
ערכי FAQ |
אחסון Embedding Vector
וקטורים מאוחסנים כמערכי float מקודדי JSON:
{
"embedding_vector": "[0.0123, -0.0456, 0.0789, ...]",
"dimensions": 384
}
הערה: לפרודקשן עם יותר מ-10k מוצרים, Supabase pgvector מומלץ לחיפוש דמיון יעיל.
wp_waa_playbook_sessions
מטרה: ניהול מצב עבור זרימות שיחה מודרכות רב-שלביות (playbooks).
CREATE TABLE {prefix}waa_playbook_sessions (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
session_id VARCHAR(64) NOT NULL,
playbook_id BIGINT(20) UNSIGNED NOT NULL,
current_step_index INT(11) NOT NULL DEFAULT 0,
step_responses LONGTEXT DEFAULT NULL,
collected_variables LONGTEXT DEFAULT NULL,
status ENUM('active','paused','completed','expired','abandoned') NOT NULL DEFAULT 'active',
started_at DATETIME NOT NULL,
expires_at DATETIME NOT NULL,
last_activity_at DATETIME NOT NULL,
PRIMARY KEY (id),
KEY idx_session_status (session_id, status),
KEY idx_expires (expires_at),
KEY idx_playbook_id (playbook_id),
KEY idx_last_activity (last_activity_at)
) {charset_collate};
מצבי Status
| Status | תיאור |
|---|---|
active |
משתמש כרגע בזרימת playbook |
paused |
משתמש עזב זמנית באמצע הזרימה |
completed |
כל הצעדים הושלמו בהצלחה |
expired |
timeout של 24 שעות נחרג |
abandoned |
משתמש יצא במפורש או סגר את הצ’אט |
דוגמת ניהול מצב
{
"session_id": "abc-123",
"playbook_id": 42,
"current_step_index": 2,
"step_responses": [
{"step": 0, "response": "Blue", "timestamp": "2025-12-15T10:00:00Z"},
{"step": 1, "response": "Large", "timestamp": "2025-12-15T10:01:00Z"}
],
"collected_variables": {
"color": "Blue",
"size": "Large",
"email": "user@example.com"
},
"status": "active"
}
WordPress Options
הגדרות תוסף מאוחסנות בטבלת wp_options באמצעות WordPress Options API.
woo_ai_chatbot_settings
סוג: מחרוזת JSON
Autoload: כן
$settings = json_decode( get_option( 'woo_ai_chatbot_settings', '{}' ), true );
מבנה
{
"ai_provider": "gemini",
"model": "gemini-2.5-flash-lite",
"chat_enabled": true,
"widget_position": "bottom-right",
"max_session_duration": 3600,
"max_conversation_history": 50,
"enable_rag": true,
"enable_analytics": true,
"license_status": "active",
"trial_expires": 1735689600
}
woo_ai_chatbot_version
סוג: String
דוגמה: "0.1.0"
עוקב אחר גרסת התוסף המותקנת עבור שגרות שדרוג.
woo_ai_chatbot_license
סוג: Array (serialized)
[
'key' => 'encrypted_key_data',
'key_hash' => 'sha256_hash',
'status' => 'active',
'type' => 'remote',
'plan' => 'pro',
'expires_at' => '2026-12-31',
'domain' => 'domain_hash',
'activated_at' => '2025-01-15 10:30:00',
'checksum' => 'integrity_checksum'
]
אפשרויות Widget
אפשרויות בודדות לתאימות לאחור:
| מפתח Option | סוג | ברירת מחדל | תיאור |
|---|---|---|---|
woo_ai_chat_enabled |
bool | true |
נראות widget |
woo_ai_chat_position |
string | bottom-right |
מיקום widget |
woo_ai_chat_welcome_message |
string | מותאם לשפה | ברכה ראשונית |
woo_ai_chat_show_mobile |
bool | true |
תצוגה במובייל |
woo_ai_chat_show_desktop |
bool | true |
תצוגה בדסקטופ |
woo_ai_chat_disable_cart_checkout |
bool | false |
הסתרה בעגלה/checkout |
woo_ai_chat_excluded_pages |
array | [] |
מזהי עמודים להחרגה |
Transients ו-Caching
Transients מספקים caching מבוסס TTL עם אינטגרציית object cache אוטומטית.
Cache סטטיסטיקות שימוש
// Key: woo_ai_chatbot_stats_{period}
// TTL: שעה אחת
$stats = get_transient( 'woo_ai_chatbot_stats_daily' );
Cache עדיפות ספקים
// Key: woo_ai_priority_order
// TTL: שעה אחת
// Structure: ['gemini', 'claude', 'openai']
set_transient( self::PRIORITY_CACHE_KEY, $priority, HOUR_IN_SECONDS );
Cache סטטוס רישיון
// Key: woo_ai_license_status
// TTL: 72 שעות
// Values: 'active', 'inactive', 'trial'
set_transient( self::CACHE_KEY, 'active', 72 * HOUR_IN_SECONDS );
הגבלת קצב
// Key: woo_ai_chatbot_rate_{session_id}
// TTL: 60 שניות
// עוקב אחר ספירת בקשות לכל session
$count = (int) get_transient( $cache_key );
set_transient( $cache_key, $count + 1, 60 );
נעילת אינדוקס
// Key: woo_ai_chatbot_indexing
// TTL: 30 דקות
// מונע פעולות אינדוקס בו-זמניות
set_transient( 'woo_ai_chatbot_indexing', true, 30 * MINUTE_IN_SECONDS );
Cache Playbook
// Key: woo_ai_playbooks_cache
// TTL: שעה אחת
// Caches הגדרות playbook פעילות
set_transient( self::CACHE_KEY, $playbooks, HOUR_IN_SECONDS );
Custom Post Types
waa_playbook
Post Type Slug: waa_playbook
REST Base: /wp-json/wp/v2/waa-playbooks
register_post_type( 'waa_playbook', [
'public' => false,
'show_in_rest' => true,
'rest_base' => 'waa-playbooks',
'supports' => ['title', 'custom-fields'],
'capabilities' => ['manage_woocommerce'],
] );
שדות Meta רשומים
| מפתח Meta | סוג | תיאור |
|---|---|---|
_waa_intent |
string | ביטוי/intent הפעלה |
_waa_priority |
integer | עדיפות 0-100 (ברירת מחדל: 50) |
_waa_steps |
string (JSON) | מערך הגדרות צעדים |
_waa_conditions |
string (JSON) | תנאי הפעלה |
_waa_trigger |
string | auto או manual |
_waa_status |
string | draft או active |
מבנה JSON של צעדים
[
{
"id": "step_1",
"type": "question",
"message": "What color do you prefer?",
"options": ["Red", "Blue", "Green"],
"variable": "color",
"required": true
},
{
"id": "step_2",
"type": "action",
"action": "show_products",
"filters": {"color": "{{color}}"}
}
]
מיגרציית נתונים
מעקב גרסאות
גרסת סכמת מסד נתונים נעקבת בנפרד מגרסת התוסף:
private const DB_VERSION = '1.0.0';
private const DB_VERSION_OPTION = 'woo_ai_chatbot_db_version';
זרימת מיגרציה
public function create_tables() {
$current = get_option( self::DB_VERSION_OPTION, '0.0.0' );
if ( version_compare( $current, '1.0.0', '<' ) ) {
// יצירת סכמה ראשונית
$this->create_events_table();
$this->create_sessions_table();
// ...
}
if ( version_compare( $current, '1.1.0', '<' ) ) {
// הוספת עמודה חדשה
$this->migrate_to_1_1_0();
}
update_option( self::DB_VERSION_OPTION, self::DB_VERSION );
}
הוספת עמודות חדשות
private function migrate_to_1_1_0() {
global $wpdb;
$table = $wpdb->prefix . 'waa_sessions';
// בדיקה אם העמודה קיימת
$column_exists = $wpdb->get_var(
"SHOW COLUMNS FROM {$table} LIKE 'sentiment_score'"
);
if ( ! $column_exists ) {
$wpdb->query(
"ALTER TABLE {$table}
ADD COLUMN sentiment_score FLOAT NULL
AFTER model_used"
);
}
}
דוגמאות שאילתות
שליפת Session עם אירועים
global $wpdb;
$prefix = $wpdb->prefix;
$session = $wpdb->get_row(
$wpdb->prepare(
"SELECT s.*,
COUNT(e.id) as event_count,
MAX(e.timestamp) as last_event
FROM {$prefix}waa_sessions s
LEFT JOIN {$prefix}waa_events e ON s.session_id = e.session_id
WHERE s.session_id = %s
GROUP BY s.id",
$session_id
),
ARRAY_A
);
אנליטיקה: משפך המרה
$funnel = $wpdb->get_results(
$wpdb->prepare(
"SELECT
event_type,
COUNT(*) as count,
COUNT(DISTINCT session_id) as unique_sessions
FROM {$prefix}waa_events
WHERE timestamp >= %s
AND event_type IN ('chat_started', 'product_clicked', 'cart_added', 'order_completed')
GROUP BY event_type
ORDER BY FIELD(event_type, 'chat_started', 'product_clicked', 'cart_added', 'order_completed')",
$start_date
),
ARRAY_A
);
Sessions Playbook פעילים
$active_sessions = $wpdb->get_results(
$wpdb->prepare(
"SELECT ps.*, p.post_title as playbook_name
FROM {$prefix}waa_playbook_sessions ps
JOIN {$prefix}posts p ON ps.playbook_id = p.ID
WHERE ps.status = 'active'
AND ps.expires_at > %s
ORDER BY ps.last_activity_at DESC
LIMIT %d",
current_time( 'mysql' ),
100
),
ARRAY_A
);
ביצועים: הכנסת אירועים ב-bulk
// שימוש ב-INSERT בודד עם ערכים מרובים לפעולות bulk
$values = [];
$placeholders = [];
foreach ( $events as $event ) {
$placeholders[] = '(%s, %s, %s, %d, %s)';
$values[] = $event['session_id'];
$values[] = $event['event_type'];
$values[] = wp_json_encode( $event['data'] );
$values[] = $event['user_id'];
$values[] = $event['timestamp'];
}
$sql = "INSERT INTO {$prefix}waa_events
(session_id, event_type, event_data, user_id, timestamp)
VALUES " . implode( ', ', $placeholders );
$wpdb->query( $wpdb->prepare( $sql, $values ) );
ניקוי: הסרת נתונים ישנים
// הסרת sessions שפג תוקפם והאירועים שלהם באופן אטומי
$wpdb->query( 'START TRANSACTION' );
try {
// קבלת מזהי session שפג תוקפם
$expired = $wpdb->get_col(
$wpdb->prepare(
"SELECT session_id FROM {$prefix}waa_sessions
WHERE expires_at < %s",
current_time( 'mysql' )
)
);
if ( ! empty( $expired ) ) {
$placeholders = implode( ',', array_fill( 0, count( $expired ), '%s' ) );
// מחיקת אירועים קשורים
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$prefix}waa_events
WHERE session_id IN ({$placeholders})",
$expired
)
);
// מחיקת sessions
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$prefix}waa_sessions
WHERE session_id IN ({$placeholders})",
$expired
)
);
}
$wpdb->query( 'COMMIT' );
} catch ( Exception $e ) {
$wpdb->query( 'ROLLBACK' );
throw $e;
}
שיקולי ביצועים
שימוש באינדקסים
תמיד אמתו ששאילתות משתמשות באינדקסים מתאימים:
EXPLAIN SELECT * FROM wp_waa_events
WHERE event_type = 'product_clicked'
AND timestamp > '2025-12-01';
טיפים לאופטימיזציית שאילתות
- השתמשו ב-LIMIT: תמיד עשו pagination לקבוצות תוצאות גדולות
- הימנעו מ-SELECT *: בקשו רק עמודות נדרשות
- Prepared Statements: תמיד השתמשו ב-
$wpdb->prepare() - פעולות Batch: השתמשו ב-INSERT/DELETE רב-שורתי
- מודעות לאינדקס: מבנו סעיפי WHERE להתאמה לאינדקסים
גדלי טבלה מומלצים
| טבלה | מקסימום שורות מומלץ | פעולה בסף |
|---|---|---|
waa_events |
1,000,000 | ניקוי אגרסיבי של 30 יום |
waa_sessions |
100,000 | הפעלת ניקוי שעתי |
waa_playbook_sessions |
50,000 | שמירה של 7 ימים |
אבטחה
מניעת SQL Injection
// תמיד השתמשו ב-prepared statements
$result = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(*) FROM {$table} WHERE user_id = %d",
$user_id
)
);
// לעולם אל תעשו את זה
$wpdb->query( "DELETE FROM {$table} WHERE id = {$id}" ); // לא בטוח
סניטציית נתונים
$session_id = sanitize_text_field( $_POST['session_id'] );
$user_id = absint( $_POST['user_id'] );
$event_data = wp_json_encode( $data ); // מבצע escape אוטומטי
תיעוד קשור
מחבר: צוות פיתוח WooAI
צור קשר: leowebmark@gmail.com

