PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.0.9
MxChat – AI Chatbot & Content Generation for WordPress v3.0.9
3.2.21 3.2.20 3.2.19 3.2.18 3.2.17 3.2.16 3.2.15 3.2.14 3.2.12 3.2.13 3.2.11 3.2.10 3.2.9 3.2.8 3.2.7 3.2.6 3.2.5 3.2.4 3.2.3 3.2.2 3.2.1 2.0.3 2.0.4 2.0.5 2.0.6 All 152 releases
← All changes | includes/admin-content-page.php +2 -512 3.2.23.0.9 View file →
@@ -21,11 +21,8 @@
21 21 $pro_internal_linking = apply_filters('mxchat_content_pro_feature', false, 'internal_linking');
22 22 $pro_tool_use = apply_filters('mxchat_content_pro_feature', false, 'tool_use');
23 23 $pro_image_management = apply_filters('mxchat_content_pro_feature', false, 'image_management');
24 24 $pro_meta_management = apply_filters('mxchat_content_pro_feature', false, 'meta_management');
25 - $pro_gsc_integration = apply_filters('mxchat_content_pro_feature', false, 'gsc_integration');
26 - $pro_content_calendar = apply_filters('mxchat_content_pro_feature', false, 'content_calendar');
27 - $pro_template_generator = apply_filters('mxchat_content_pro_feature', false, 'template_generator');
28 25 ?>
29 26 <div class="mxch-admin-wrapper">
30 27 <!-- Mobile Header -->
31 28 <header class="mxch-mobile-header">
@@ -65,20 +62,8 @@
65 62 <button class="mxch-mobile-nav-link" data-target="content-settings">
66 63 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>
67 64 <span><?php esc_html_e('Settings', 'mxchat'); ?></span>
68 65 </button>
69 - <button class="mxch-mobile-nav-link" data-target="content-seo">
70 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20V10"/><path d="M18 20V4"/><path d="M6 20v-4"/></svg>
71 - <span><?php esc_html_e('SEO', 'mxchat'); ?></span>
72 - </button>
73 - <button class="mxch-mobile-nav-link" data-target="content-calendar">
74 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>
75 - <span><?php esc_html_e('Calendar', 'mxchat'); ?></span>
76 - </button>
77 - <button class="mxch-mobile-nav-link" data-target="content-templates">
78 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
79 - <span><?php esc_html_e('Templates', 'mxchat'); ?></span>
80 - </button>
81 66 </div>
82 67 </nav>
83 68 </div>
84 69
@@ -123,35 +108,8 @@
123 108 </span>
124 109 <span class="mxch-nav-link-text"><?php esc_html_e('Settings', 'mxchat'); ?></span>
125 110 </button>
126 111 </div>
127 -
128 - <div class="mxch-nav-item" data-section="content-seo">
129 - <button class="mxch-nav-link" data-target="content-seo">
130 - <span class="mxch-nav-link-icon">
131 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20V10"/><path d="M18 20V4"/><path d="M6 20v-4"/></svg>
132 - </span>
133 - <span class="mxch-nav-link-text"><?php esc_html_e('SEO', 'mxchat'); ?></span>
134 - </button>
135 - </div>
136 -
137 - <div class="mxch-nav-item" data-section="content-calendar">
138 - <button class="mxch-nav-link" data-target="content-calendar">
139 - <span class="mxch-nav-link-icon">
140 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg>
141 - </span>
142 - <span class="mxch-nav-link-text"><?php esc_html_e('Calendar', 'mxchat'); ?></span>
143 - </button>
144 - </div>
145 -
146 - <div class="mxch-nav-item" data-section="content-templates">
147 - <button class="mxch-nav-link" data-target="content-templates">
148 - <span class="mxch-nav-link-icon">
149 - <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
150 - </span>
151 - <span class="mxch-nav-link-text"><?php esc_html_e('Templates', 'mxchat'); ?></span>
152 - </button>
153 - </div>
154 112 </div>
155 113 </nav>
156 114 </aside>
157 115
@@ -232,12 +190,8 @@
232 190 </div>
233 191 </div>
234 192 <div class="mxch-cg-form">
235 193 <textarea id="mxch-cg-prompt" class="mxch-cg-prompt" rows="3" placeholder="<?php esc_attr_e('Describe the content you want to generate...', 'mxchat'); ?>"></textarea>
236 - <button type="button" id="mxch-cg-edit-prompt-btn" class="mxch-cg-edit-prompt-btn">
237 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>
238 - <?php esc_html_e('Edit Default Prompt', 'mxchat'); ?>
239 - </button>
240 194 <div class="mxch-cg-options">
241 195 <div class="mxch-cg-option">
242 196 <label class="mxch-cg-option-label" for="mxch-cg-type"><?php esc_html_e('Type', 'mxchat'); ?></label>
243 197 <select id="mxch-cg-type" class="mxch-cg-select">
@@ -272,15 +226,8 @@
272 226 <option value="show"><?php esc_html_e('Show', 'mxchat'); ?></option>
273 227 <option value="hide" selected><?php esc_html_e('Hide (title in content)', 'mxchat'); ?></option>
274 228 </select>
275 229 </div>
276 - <div class="mxch-cg-option">
277 - <label class="mxch-cg-option-label" for="mxch-cg-template-mode"><?php esc_html_e('Template Mode', 'mxchat'); ?></label>
278 - <select id="mxch-cg-template-mode" class="mxch-cg-select">
279 - <option value="off" selected><?php esc_html_e('Off', 'mxchat'); ?></option>
280 - <option value="on"><?php esc_html_e('On (Spintax)', 'mxchat'); ?></option>
281 - </select>
282 - </div>
283 230 </div>
284 231 <button type="button" id="mxch-cg-generate-btn" class="mxch-cg-generate-btn mxch-cg-generate-btn-full">
285 232 <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"/></svg>
286 233 <span><?php esc_html_e('Generate Content', 'mxchat'); ?></span>
@@ -294,29 +241,8 @@
294 241 <p class="mxch-cg-progress-text"><?php esc_html_e('Starting...', 'mxchat'); ?></p>
295 242 </div>
296 243 </div>
297 244 </div>
298 - <!-- Edit Default Prompt Modal -->
299 - <div id="mxch-cg-prompt-modal" class="mxch-cg-prompt-modal" style="display:none;">
300 - <div class="mxch-cg-prompt-modal-overlay"></div>
301 - <div class="mxch-cg-prompt-modal-content">
302 - <div class="mxch-cg-prompt-modal-header">
303 - <h3><?php esc_html_e('Edit Default System Prompt', 'mxchat'); ?></h3>
304 - <button type="button" id="mxch-cg-prompt-modal-close" class="mxch-cg-prompt-modal-close">&times;</button>
305 - </div>
306 - <div class="mxch-cg-prompt-modal-body">
307 - <p class="mxch-cg-prompt-modal-desc"><?php esc_html_e('This is the system prompt sent to the AI when generating content. Edit it to customize how your content is generated.', 'mxchat'); ?></p>
308 - <textarea id="mxch-cg-system-prompt-editor" class="mxch-cg-system-prompt-editor" rows="20"></textarea>
309 - </div>
310 - <div class="mxch-cg-prompt-modal-footer">
311 - <button type="button" id="mxch-cg-prompt-reset" class="button"><?php esc_html_e('Reset to Default', 'mxchat'); ?></button>
312 - <div class="mxch-cg-prompt-modal-footer-right">
313 - <button type="button" id="mxch-cg-prompt-cancel" class="button"><?php esc_html_e('Cancel', 'mxchat'); ?></button>
314 - <button type="button" id="mxch-cg-prompt-save" class="button button-primary"><?php esc_html_e('Save Changes', 'mxchat'); ?></button>
315 - </div>
316 - </div>
317 - </div>
318 - </div>
319 245 <!-- Loading indicator (shown during async generation) -->
320 246 <div id="mxch-cg-loading-indicator" class="mxch-cg-loading-indicator" style="display:none;">
321 247 <div class="mxch-cg-loading-spinner">
322 248 <div class="mxch-cg-loading-spinner-ring"></div>
@@ -356,12 +282,8 @@
356 282 <?php if (!$pro_meta_management): ?>
357 283 <span class="mxch-cg-pro-badge"><?php echo $is_activated ? esc_html__('ADD-ON', 'mxchat') : esc_html__('PRO', 'mxchat'); ?></span>
358 284 <?php endif; ?>
359 285 </button>
360 - <button type="button" class="mxch-cg-left-tab" data-tab="seo">
361 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
362 - <?php esc_html_e('SEO', 'mxchat'); ?>
363 - </button>
364 286 </div>
365 287
366 288 <!-- Images Panel (default visible) -->
367 289 <div class="mxch-cg-left-panel active" id="mxch-cg-panel-images">
@@ -400,45 +322,8 @@
400 322 <span><?php echo $is_activated ? esc_html__('Install Add-on', 'mxchat') : esc_html__('Upgrade to Pro', 'mxchat'); ?></span>
401 323 </div>
402 324 <?php endif; ?>
403 325 </div>
404 -
405 - <!-- SEO Panel -->
406 - <div class="mxch-cg-left-panel" id="mxch-cg-panel-seo">
407 - <div class="mxch-seo-panel">
408 - <!-- Score Header -->
409 - <div class="mxch-seo-score-header">
410 - <div class="mxch-seo-score-ring">
411 - <svg viewBox="0 0 60 60">
412 - <circle class="mxch-seo-ring-bg" cx="30" cy="30" r="26" />
413 - <circle class="mxch-seo-ring-fill" id="mxch-seo-ring" cx="30" cy="30" r="26" stroke-dasharray="163.36" stroke-dashoffset="163.36" />
414 - </svg>
415 - <span class="mxch-seo-score-num" id="mxch-seo-score">&mdash;</span>
416 - </div>
417 - <div class="mxch-seo-score-info">
418 - <span class="mxch-seo-score-label" id="mxch-seo-score-label"><?php esc_html_e('SEO Score', 'mxchat'); ?></span>
419 - <span class="mxch-seo-score-summary" id="mxch-seo-score-summary"><?php esc_html_e('Generate content to analyze', 'mxchat'); ?></span>
420 - </div>
421 - <button type="button" class="mxch-seo-analyze-btn" id="mxch-seo-analyze" title="<?php esc_attr_e('Analyze', 'mxchat'); ?>">
422 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/><path d="M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16"/><path d="M16 16h5v5"/></svg>
423 - </button>
424 - </div>
425 - <!-- Checklist -->
426 - <div class="mxch-seo-checklist" id="mxch-seo-checklist">
427 - <div class="mxch-seo-empty" id="mxch-seo-empty">
428 - <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
429 - <span><?php esc_html_e('SEO analysis will appear here after content is generated', 'mxchat'); ?></span>
430 - </div>
431 - </div>
432 - <!-- AI Optimize -->
433 - <div class="mxch-seo-actions" id="mxch-seo-actions" style="display:none;">
434 - <button type="button" class="mxch-seo-fix-btn" id="mxch-seo-ai-optimize" title="<?php esc_attr_e('AI optimizes all failing SEO checks', 'mxchat'); ?>">
435 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3-1.9 5.8a2 2 0 0 1-1.287 1.288L3 12l5.8 1.9a2 2 0 0 1 1.288 1.287L12 21l1.9-5.8a2 2 0 0 1 1.287-1.288L21 12l-5.8-1.9a2 2 0 0 1-1.288-1.287Z"/></svg>
436 - <?php esc_html_e('Optimize All', 'mxchat'); ?>
437 - </button>
438 - </div>
439 - </div>
440 - </div>
441 326 </div>
442 327
443 328 <!-- Chat Column -->
444 329 <div class="mxch-cg-chat-col">
@@ -495,17 +380,13 @@
495 380 SETTINGS
496 381 ======================================== -->
497 382 <div id="content-settings" class="mxch-section">
498 383 <div class="mxch-content-header">
499 - <h1 class="mxch-content-title"><?php esc_html_e('Settings', 'mxchat'); ?></h1>
500 - <p class="mxch-content-subtitle"><?php esc_html_e('Configure content generation and SEO optimization.', 'mxchat'); ?></p>
384 + <h1 class="mxch-content-title"><?php esc_html_e('Content Settings', 'mxchat'); ?></h1>
385 + <p class="mxch-content-subtitle"><?php esc_html_e('Configure AI models and image generation for content creation.', 'mxchat'); ?></p>
501 386 </div>
502 387
503 - <!-- ── Content Settings ── -->
504 388 <div class="mxch-card">
505 - <div class="mxch-card-header">
506 - <h3 class="mxch-card-title"><?php esc_html_e('Content', 'mxchat'); ?></h3>
507 - </div>
508 389 <div class="mxch-card-body">
509 390
510 391 <!-- Content Model -->
511 392 <div class="mxch-field">
@@ -515,9 +396,8 @@
515 396 <?php
516 397 $content_model = $options['content_model'] ?? ($options['model'] ?? 'gpt-5.1-chat-latest');
517 398 $models = array(
518 399 'OpenAI' => array(
519 - 'gpt-5.4' => 'GPT-5.4',
520 400 'gpt-5.2' => 'GPT-5.2',
521 401 'gpt-5.1-chat-latest' => 'GPT-5.1',
522 402 'gpt-5' => 'GPT-5',
523 403 ),
@@ -630,398 +510,8 @@
630 510 </div>
631 511
632 512 </div>
633 513 </div>
634 -
635 - <!-- ── SEO Settings ── -->
636 - <div class="mxch-card" style="margin-top: 16px;">
637 - <div class="mxch-card-header">
638 - <h3 class="mxch-card-title"><?php esc_html_e('SEO', 'mxchat'); ?></h3>
639 - </div>
640 - <div class="mxch-card-body">
641 -
642 - <?php if (!$pro_gsc_integration): ?>
643 - <!-- Google Search Console (Pro/Add-on) -->
644 - <div class="mxch-field mxch-gsc-settings-locked">
645 - <div class="mxch-gsc-settings-locked-header">
646 - <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
647 - <span><?php esc_html_e('Google Search Console', 'mxchat'); ?></span>
648 - <span class="mxch-cg-pro-badge"><?php echo $is_activated ? esc_html__('ADD-ON', 'mxchat') : esc_html__('PRO', 'mxchat'); ?></span>
649 - </div>
650 - <p class="mxch-field-description"><?php esc_html_e('Connect Google Search Console to see real search performance data — clicks, impressions, CTR, and keyword rankings — directly in your SEO dashboard. Chat with your GSC data using the AI Admin Assistant add-on.', 'mxchat'); ?></p>
651 - <button type="button" class="mxch-gsc-connect-btn" disabled>
652 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
653 - <?php esc_html_e('Connect Google Search Console', 'mxchat'); ?>
654 - </button>
655 - <?php if ($is_activated): ?>
656 - <a href="https://mxchat.ai/" target="_blank" class="mxch-cg-pro-upgrade-link"><?php esc_html_e('Install Add-on', 'mxchat'); ?></a>
657 - <?php else: ?>
658 - <a href="https://mxchat.ai/" target="_blank" class="mxch-cg-pro-upgrade-link"><?php esc_html_e('Upgrade to Pro', 'mxchat'); ?></a>
659 - <?php endif; ?>
660 - </div>
661 - <?php endif; ?>
662 -
663 - <!-- AI Optimize Fields -->
664 - <?php
665 - $seo_opt_meta = $options['seo_optimize_meta_desc'] ?? 'on';
666 - $seo_opt_title = $options['seo_optimize_seo_title'] ?? 'on';
667 - $seo_opt_slug = $options['seo_optimize_slug'] ?? 'on';
668 - $seo_opt_read = $options['seo_optimize_readability'] ?? 'on';
669 - $seo_opt_links = $options['seo_optimize_internal_links'] ?? 'on';
670 - $seo_opt_imgalt = $options['seo_optimize_img_alt'] ?? 'on';
671 - $seo_opt_feat = $options['seo_optimize_featured_img'] ?? 'on';
672 - $has_addon = $pro_internal_linking; // any addon feature unlocked means addon is present
673 - ?>
674 - <div class="mxch-field">
675 - <label class="mxch-field-label"><?php esc_html_e('AI Optimize', 'mxchat'); ?></label>
676 - <p class="mxch-field-description" style="margin-bottom: 10px;"><?php esc_html_e('Choose which checks AI Optimize will fix when run.', 'mxchat'); ?></p>
677 - <div class="mxch-seo-opt-grid">
678 - <label class="mxch-seo-opt-item">
679 - <input type="checkbox" class="mxch-seo-opt-check" data-field="seo_optimize_meta_desc" <?php checked($seo_opt_meta, 'on'); ?>>
680 - <span><?php esc_html_e('Meta Description', 'mxchat'); ?></span>
681 - </label>
682 - <label class="mxch-seo-opt-item">
683 - <input type="checkbox" class="mxch-seo-opt-check" data-field="seo_optimize_seo_title" <?php checked($seo_opt_title, 'on'); ?>>
684 - <span><?php esc_html_e('SEO Title', 'mxchat'); ?></span>
685 - </label>
686 - <label class="mxch-seo-opt-item">
687 - <input type="checkbox" class="mxch-seo-opt-check" data-field="seo_optimize_slug" <?php checked($seo_opt_slug, 'on'); ?>>
688 - <span><?php esc_html_e('URL Slug', 'mxchat'); ?></span>
689 - </label>
690 - <label class="mxch-seo-opt-item<?php echo $has_addon ? '' : ' mxch-seo-opt-locked'; ?>">
691 - <input type="checkbox" class="mxch-seo-opt-check" data-field="seo_optimize_readability" <?php checked($seo_opt_read, 'on'); ?><?php echo $has_addon ? '' : ' disabled'; ?>>
692 - <span><?php esc_html_e('Readability', 'mxchat'); ?></span>
693 - <?php if (!$has_addon): ?>
694 - <span class="mxch-cg-pro-badge"><?php echo $is_activated ? esc_html__('ADD-ON', 'mxchat') : esc_html__('PRO', 'mxchat'); ?></span>
695 - <?php endif; ?>
696 - </label>
697 - <label class="mxch-seo-opt-item<?php echo $has_addon ? '' : ' mxch-seo-opt-locked'; ?>">
698 - <input type="checkbox" class="mxch-seo-opt-check" data-field="seo_optimize_internal_links" <?php checked($seo_opt_links, 'on'); ?><?php echo $has_addon ? '' : ' disabled'; ?>>
699 - <span><?php esc_html_e('Internal Links', 'mxchat'); ?></span>
700 - <?php if (!$has_addon): ?>
701 - <span class="mxch-cg-pro-badge"><?php echo $is_activated ? esc_html__('ADD-ON', 'mxchat') : esc_html__('PRO', 'mxchat'); ?></span>
702 - <?php endif; ?>
703 - </label>
704 - <label class="mxch-seo-opt-item<?php echo $has_addon ? '' : ' mxch-seo-opt-locked'; ?>">
705 - <input type="checkbox" class="mxch-seo-opt-check" data-field="seo_optimize_img_alt" <?php checked($seo_opt_imgalt, 'on'); ?><?php echo $has_addon ? '' : ' disabled'; ?>>
706 - <span><?php esc_html_e('Image ALT Text', 'mxchat'); ?></span>
707 - <?php if (!$has_addon): ?>
708 - <span class="mxch-cg-pro-badge"><?php echo $is_activated ? esc_html__('ADD-ON', 'mxchat') : esc_html__('PRO', 'mxchat'); ?></span>
709 - <?php endif; ?>
710 - </label>
711 - <label class="mxch-seo-opt-item<?php echo $has_addon ? '' : ' mxch-seo-opt-locked'; ?>">
712 - <input type="checkbox" class="mxch-seo-opt-check" data-field="seo_optimize_featured_img" <?php checked($seo_opt_feat, 'on'); ?><?php echo $has_addon ? '' : ' disabled'; ?>>
713 - <span><?php esc_html_e('Featured Image', 'mxchat'); ?></span>
714 - <?php if (!$has_addon): ?>
715 - <span class="mxch-cg-pro-badge"><?php echo $is_activated ? esc_html__('ADD-ON', 'mxchat') : esc_html__('PRO', 'mxchat'); ?></span>
716 - <?php endif; ?>
717 - </label>
718 - </div>
719 - </div>
720 -
721 - </div>
722 - </div>
723 - </div>
724 -
725 - <!-- ========================================
726 - SEO
727 - ======================================== -->
728 - <div id="content-seo" class="mxch-section">
729 - <div class="mxch-content-header">
730 - <h1 class="mxch-content-title"><?php esc_html_e('SEO Analysis', 'mxchat'); ?></h1>
731 - <p class="mxch-content-subtitle"><?php esc_html_e('Analyze and optimize SEO for all your content.', 'mxchat'); ?></p>
732 - </div>
733 -
734 - <div class="mxch-card">
735 - <div class="mxch-card-body" style="padding:0;">
736 - <!-- Filter Bar -->
737 - <div class="mxch-seod-filters">
738 - <div class="mxch-seod-filters-left">
739 - <select id="mxch-seod-post-type" class="mxch-seod-select">
740 - <option value="any"><?php esc_html_e('All Types', 'mxchat'); ?></option>
741 - <option value="post"><?php esc_html_e('Posts', 'mxchat'); ?></option>
742 - <option value="page"><?php esc_html_e('Pages', 'mxchat'); ?></option>
743 - <?php
744 - $extra_types = get_post_types(array('public' => true, '_builtin' => false), 'objects');
745 - foreach ($extra_types as $pt) {
746 - if (in_array($pt->name, array('attachment', 'elementor_library', 'e-landing-page'), true)) continue;
747 - printf('<option value="%s">%s</option>', esc_attr($pt->name), esc_html($pt->labels->name));
748 - }
749 - ?>
750 - </select>
751 - <div class="mxch-seod-filter-pills">
752 - <button type="button" class="mxch-seod-pill active" data-filter="all"><?php esc_html_e('All', 'mxchat'); ?></button>
753 - <button type="button" class="mxch-seod-pill" data-filter="issues"><?php esc_html_e('Issues', 'mxchat'); ?></button>
754 - <button type="button" class="mxch-seod-pill" data-filter="good"><?php esc_html_e('Good', 'mxchat'); ?></button>
755 - <button type="button" class="mxch-seod-pill" data-filter="unscored"><?php esc_html_e('Not Scanned', 'mxchat'); ?></button>
756 - </div>
757 - </div>
758 - <div class="mxch-seod-filters-right">
759 - <?php if (!$has_addon): ?>
760 - <span class="mxch-seod-bulk-note" id="mxch-seod-bulk-note" style="display:none;"><?php echo $is_activated ? esc_html__('Bulk optimize requires the Advanced Content Editor add-on', 'mxchat') : esc_html__('Bulk optimize requires MxChat Pro', 'mxchat'); ?></span>
761 - <?php endif; ?>
762 - <button type="button" class="mxch-seod-scan-btn mxch-seod-optimize-selected-btn<?php echo $has_addon ? '' : ' mxch-seod-bulk-locked'; ?>" id="mxch-seod-optimize-selected" style="display:none;"<?php echo $has_addon ? '' : ' disabled title="' . esc_attr__('Pro required for bulk optimization', 'mxchat') . '"'; ?>>
763 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m12 3-1.9 5.8a2 2 0 0 1-1.287 1.288L3 12l5.8 1.9a2 2 0 0 1 1.288 1.287L12 21l1.9-5.8a2 2 0 0 1 1.287-1.288L21 12l-5.8-1.9a2 2 0 0 1-1.288-1.287Z"/></svg>
764 - <span><?php esc_html_e('Optimize Selected', 'mxchat'); ?></span>
765 - <?php if (!$has_addon): ?>
766 - <span class="mxch-cg-pro-badge"><?php echo $is_activated ? esc_html__('ADD-ON', 'mxchat') : esc_html__('PRO', 'mxchat'); ?></span>
767 - <?php endif; ?>
768 - </button>
769 - <button type="button" class="mxch-seod-scan-btn mxch-seod-scan-stop-btn" id="mxch-seod-optimize-stop" style="display:none;">
770 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="6" y="6" width="12" height="12" rx="2"/></svg>
771 - <span><?php esc_html_e('Stop', 'mxchat'); ?></span>
772 - </button>
773 - <div class="mxch-seod-search-wrap">
774 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
775 - <input type="text" id="mxch-seod-search" class="mxch-seod-search" placeholder="<?php esc_attr_e('Search posts...', 'mxchat'); ?>">
776 - </div>
777 - </div>
778 - </div>
779 -
780 - <!-- Posts Table -->
781 - <div class="mxch-seod-table-wrap">
782 - <div id="mxch-seod-table" class="mxch-seod-table">
783 - <!-- Rendered by JS -->
784 - </div>
785 - <div id="mxch-seod-loading" class="mxch-seod-loading">
786 - <div class="mxch-cg-history-spinner"></div>
787 - <p><?php esc_html_e('Loading posts...', 'mxchat'); ?></p>
788 - </div>
789 - <div id="mxch-seod-empty" class="mxch-seod-empty" style="display:none;">
790 - <svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20V10"/><path d="M18 20V4"/><path d="M6 20v-4"/></svg>
791 - <p><?php esc_html_e('No posts found matching your filters.', 'mxchat'); ?></p>
792 - </div>
793 - </div>
794 -
795 - <!-- Footer: Scan + Pagination -->
796 - <div class="mxch-seod-footer" id="mxch-seod-footer" style="display:none;">
797 - <div class="mxch-seod-footer-left">
798 - <button type="button" class="mxch-seod-scan-btn" id="mxch-seod-scan-all">
799 - <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20V10"/><path d="M18 20V4"/><path d="M6 20v-4"/></svg>
800 - <span><?php esc_html_e('Scan Unscored', 'mxchat'); ?></span>
801 - </button>
802 - <span class="mxch-seod-scan-status" id="mxch-seod-scan-status"></span>
803 - </div>
804 - <div class="mxch-seod-pagination" id="mxch-seod-pagination">
805 - <!-- Rendered by JS -->
806 - </div>
807 - </div>
808 - </div>
809 - </div>
810 - </div>
811 -
812 - <!-- ========================================
813 - CALENDAR
814 - ======================================== -->
815 - <div id="content-calendar" class="mxch-section">
816 - <?php if ($pro_content_calendar) : ?>
817 - <!-- Add-on is active — container for calendar JS to populate -->
818 - <div class="mxcal-container" id="mxcal-container"></div>
819 - <?php else : ?>
820 - <!-- Add-on not installed — show blurred demo calendar -->
821 - <style>
822 - .mxcal-demo-wrap { position: relative; }
823 - .mxcal-demo-blur { filter: blur(3px); pointer-events: none; user-select: none; opacity: 0.7; }
824 - .mxcal-demo-overlay {
825 - position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
826 - z-index: 10; text-align: center; background: rgba(255,255,255,0.95);
827 - border-radius: 16px; padding: 40px 48px; box-shadow: 0 8px 40px rgba(120,115,245,0.15);
828 - border: 1px solid rgba(120,115,245,0.12); max-width: 460px; width: 90%;
829 - }
830 - .mxcal-demo-overlay h2 {
831 - font-size: 22px; font-weight: 700; margin: 0 0 8px; color: #1A202C;
832 - }
833 - .mxcal-demo-overlay p { font-size: 14px; color: #718096; line-height: 1.6; margin: 0 0 20px; }
834 - .mxcal-demo-overlay .mxcal-demo-badge {
835 - display: inline-block; background: linear-gradient(135deg, #fa73e6, #7873f5);
836 - color: #fff; font-size: 11px; font-weight: 700; padding: 4px 12px;
837 - border-radius: 20px; margin-bottom: 16px; letter-spacing: 0.5px;
838 - }
839 - .mxcal-demo-overlay a.mxcal-demo-btn {
840 - display: inline-block; background: linear-gradient(135deg, #fa73e6, #7873f5);
841 - color: #fff; font-size: 14px; font-weight: 600; padding: 12px 28px;
842 - border-radius: 10px; text-decoration: none; transition: all 0.2s;
843 - box-shadow: 0 4px 14px rgba(120,115,245,0.25);
844 - }
845 - .mxcal-demo-overlay a.mxcal-demo-btn:hover {
846 - box-shadow: 0 6px 20px rgba(120,115,245,0.35); transform: translateY(-1px);
847 - }
848 - .mxcal-demo-grid {
849 - display: grid; grid-template-columns: repeat(7, 1fr);
850 - border: 1px solid #E2E8F0; border-radius: 12px; overflow: hidden; background: #fff;
851 - }
852 - .mxcal-demo-hdr {
853 - background: #F7FAFC; padding: 10px 6px; text-align: center;
854 - font-size: 11px; font-weight: 600; color: #A0AEC0; text-transform: uppercase;
855 - border-bottom: 1px solid #E2E8F0;
856 - }
857 - .mxcal-demo-day {
858 - min-height: 90px; padding: 8px; border-right: 1px solid #F0F0F5;
859 - border-bottom: 1px solid #F0F0F5; display: flex; flex-direction: column; gap: 4px;
860 - }
861 - .mxcal-demo-day:nth-child(7n) { border-right: none; }
862 - .mxcal-demo-num { font-size: 12px; font-weight: 600; color: #A0AEC0; }
863 - .mxcal-demo-kw { font-size: 10px; font-weight: 600; color: #2D3748; line-height: 1.2; }
864 - .mxcal-demo-stats { display: flex; gap: 4px; margin-top: auto; }
865 - .mxcal-demo-vol { font-size: 9px; background: #EDF2F7; padding: 1px 5px; border-radius: 3px; color: #718096; }
866 - .mxcal-demo-kd { font-size: 9px; padding: 1px 5px; border-radius: 3px; font-weight: 700; }
867 - .mxcal-demo-easy { background: rgba(16,185,129,0.1); color: #059669; }
868 - .mxcal-demo-med { background: rgba(245,158,11,0.1); color: #d97706; }
869 - .mxcal-demo-hard { background: rgba(239,68,68,0.1); color: #dc2626; }
870 - .mxcal-demo-planned { border-left: 3px solid #CBD5E0; }
871 - .mxcal-demo-done { border-left: 3px solid #10b981; }
872 - .mxcal-demo-empty { background: #FAFAFA; }
873 - .mxcal-demo-header {
874 - display: flex; justify-content: space-between; align-items: center;
875 - margin-bottom: 16px; flex-wrap: wrap; gap: 12px;
876 - }
877 - .mxcal-demo-header h3 { font-size: 18px; font-weight: 700; color: #1A202C; margin: 0; }
878 - .mxcal-demo-month {
879 - display: flex; align-items: center; gap: 16px; justify-content: center; margin-bottom: 14px;
880 - }
881 - .mxcal-demo-month span { font-size: 16px; font-weight: 700; color: #2D3748; }
882 - .mxcal-demo-month-btn {
883 - background: none; border: 1px solid #E2E8F0; border-radius: 6px;
884 - padding: 4px 12px; font-size: 12px; color: #718096;
885 - }
886 - </style>
887 - <div class="mxcal-demo-wrap">
888 - <div class="mxcal-demo-blur">
889 - <div class="mxcal-demo-header">
890 - <h3>Content Calendar</h3>
891 - <div style="display:flex;gap:8px;">
892 - <span style="background:#EDF2F7;padding:4px 12px;border-radius:20px;font-size:12px;color:#4A5568;">mxchat.ai</span>
893 - <span style="background:linear-gradient(135deg,#fa73e6,#7873f5);padding:4px 12px;border-radius:20px;font-size:11px;color:#fff;font-weight:600;">AI Chatbot Plugin</span>
894 - </div>
895 - </div>
896 - <div class="mxcal-demo-month">
897 - <button class="mxcal-demo-month-btn">&larr;</button>
898 - <span><?php echo esc_html(wp_date('F Y')); ?></span>
899 - <button class="mxcal-demo-month-btn">&rarr;</button>
900 - </div>
901 - <div class="mxcal-demo-grid">
902 - <?php
903 - $days = array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
904 - foreach ($days as $d) echo '<div class="mxcal-demo-hdr">' . $d . '</div>';
905 -
906 - $demo_posts = array(
907 - array('kw' => 'wordpress chatbot plugin', 'vol' => '2,400', 'kd' => 'KD 28', 'cls' => 'easy', 'st' => 'done'),
908 - array('kw' => 'ai customer support', 'vol' => '1,900', 'kd' => 'KD 35', 'cls' => 'med', 'st' => 'done'),
909 - array('kw' => 'chatbot for ecommerce', 'vol' => '1,600', 'kd' => 'KD 22', 'cls' => 'easy', 'st' => 'done'),
910 - array('kw' => 'gpt wordpress integration', 'vol' => '1,100', 'kd' => 'KD 41', 'cls' => 'med', 'st' => 'planned'),
911 - array('kw' => 'live chat vs chatbot', 'vol' => '3,200', 'kd' => 'KD 18', 'cls' => 'easy', 'st' => 'planned'),
912 - array('kw' => 'ai lead generation', 'vol' => '2,800', 'kd' => 'KD 52', 'cls' => 'med', 'st' => 'planned'),
913 - array('kw' => 'reduce support tickets ai', 'vol' => '880', 'kd' => 'KD 15', 'cls' => 'easy', 'st' => 'planned'),
914 - array('kw' => 'best chatbot plugins 2026', 'vol' => '4,100', 'kd' => 'KD 62', 'cls' => 'hard', 'st' => 'planned'),
915 - array('kw' => 'woocommerce chatbot', 'vol' => '1,400', 'kd' => 'KD 30', 'cls' => 'med', 'st' => 'planned'),
916 - array('kw' => 'automate faq wordpress', 'vol' => '720', 'kd' => 'KD 12', 'cls' => 'easy', 'st' => 'planned'),
917 - array('kw' => 'claude vs chatgpt wordpress', 'vol' => '2,100', 'kd' => 'KD 38', 'cls' => 'med', 'st' => 'planned'),
918 - array('kw' => 'ai content generation', 'vol' => '5,400', 'kd' => 'KD 68', 'cls' => 'hard', 'st' => 'planned'),
919 - );
920 -
921 - $first_day = (int) wp_date('w', strtotime('first day of this month'));
922 - $days_in_month = (int) wp_date('t');
923 - $post_idx = 0;
924 -
925 - for ($i = 0; $i < $first_day; $i++) echo '<div class="mxcal-demo-day mxcal-demo-empty"></div>';
926 -
927 - for ($d = 1; $d <= $days_in_month; $d++) {
928 - if ($post_idx < count($demo_posts)) {
929 - $p = $demo_posts[$post_idx];
930 - $st_cls = $p['st'] === 'done' ? 'mxcal-demo-done' : 'mxcal-demo-planned';
931 - echo '<div class="mxcal-demo-day ' . $st_cls . '">';
932 - echo '<span class="mxcal-demo-num">' . $d . '</span>';
933 - echo '<span class="mxcal-demo-kw">' . esc_html($p['kw']) . '</span>';
934 - echo '<div class="mxcal-demo-stats">';
935 - echo '<span class="mxcal-demo-vol">' . $p['vol'] . '</span>';
936 - echo '<span class="mxcal-demo-kd mxcal-demo-' . $p['cls'] . '">' . $p['kd'] . '</span>';
937 - echo '</div></div>';
938 - $post_idx++;
939 - } else {
940 - echo '<div class="mxcal-demo-day mxcal-demo-empty"><span class="mxcal-demo-num">' . $d . '</span></div>';
941 - }
942 - }
943 -
944 - $total = $first_day + $days_in_month;
945 - $remaining = $total % 7 === 0 ? 0 : 7 - ($total % 7);
946 - for ($i = 0; $i < $remaining; $i++) echo '<div class="mxcal-demo-day mxcal-demo-empty"></div>';
947 - ?>
948 - </div>
949 - </div>
950 - <div class="mxcal-demo-overlay">
951 - <span class="mxcal-demo-badge">PRO ADD-ON</span>
952 - <h2>AI Content Calendar</h2>
953 - <p>Import SEO data and let AI generate a 30-day blog plan with targeted keywords, difficulty scores, and automated post scheduling.</p>
954 - <a href="https://mxchat.ai/advanced-content-editor/" target="_blank" class="mxcal-demo-btn">Get Advanced Content Editor</a>
955 - </div>
956 - </div>
957 - <?php endif; ?>
958 - </div>
959 -
960 - <!-- ========================================
961 - TEMPLATES
962 - ======================================== -->
963 - <div id="content-templates" class="mxch-section">
964 - <?php if ($pro_template_generator) : ?>
965 - <div id="mxtpl-container"></div>
966 - <?php else : ?>
967 - <style>
968 - .mxtpl-demo-wrap { position: relative; }
969 - .mxtpl-demo-blur { filter: blur(3px); pointer-events: none; user-select: none; opacity: 0.7; padding: 24px; }
970 - .mxtpl-demo-overlay {
971 - position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
972 - z-index: 10; text-align: center; background: rgba(255,255,255,0.95);
973 - border-radius: 16px; padding: 40px 48px; box-shadow: 0 8px 40px rgba(120,115,245,0.15);
974 - border: 1px solid rgba(120,115,245,0.12); max-width: 460px; width: 90%;
975 - }
976 - .mxtpl-demo-overlay h2 { font-size: 22px; font-weight: 700; margin: 0 0 8px; color: #1A202C; }
977 - .mxtpl-demo-overlay p { font-size: 14px; color: #718096; line-height: 1.6; margin: 0 0 20px; }
978 - .mxtpl-demo-badge { display: inline-block; background: linear-gradient(135deg, #fa73e6, #7873f5); color: #fff; font-size: 11px; font-weight: 700; padding: 4px 12px; border-radius: 20px; margin-bottom: 16px; letter-spacing: 0.5px; }
979 - .mxtpl-demo-btn { display: inline-block; background: linear-gradient(135deg, #fa73e6, #7873f5); color: #fff; font-size: 14px; font-weight: 600; padding: 12px 28px; border-radius: 10px; text-decoration: none; box-shadow: 0 4px 14px rgba(120,115,245,0.25); }
980 - .mxtpl-demo-section { margin-bottom: 20px; }
981 - .mxtpl-demo-label { font-size: 14px; font-weight: 700; color: #2D3748; margin-bottom: 8px; }
982 - .mxtpl-demo-textarea { width: 100%; padding: 12px; border: 2px solid #E2E8F0; border-radius: 8px; font-size: 13px; color: #4A5568; background: #F7FAFC; resize: none; font-family: inherit; }
983 - .mxtpl-demo-pills { display: flex; gap: 6px; margin-bottom: 12px; flex-wrap: wrap; }
984 - .mxtpl-demo-pill { background: rgba(120,115,245,0.08); color: #7873f5; padding: 3px 10px; border-radius: 20px; font-size: 11px; font-weight: 600; font-family: monospace; }
985 - .mxtpl-demo-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; }
986 - .mxtpl-demo-field { display: flex; flex-direction: column; gap: 4px; }
987 - .mxtpl-demo-field label { font-size: 12px; font-weight: 600; color: #718096; }
988 - .mxtpl-demo-field select, .mxtpl-demo-field input { padding: 8px 10px; border: 2px solid #E2E8F0; border-radius: 6px; font-size: 13px; background: #F7FAFC; }
989 - </style>
990 - <div class="mxtpl-demo-wrap">
991 - <div class="mxtpl-demo-blur">
992 - <div class="mxtpl-demo-section">
993 - <div class="mxtpl-demo-label">1. Upload Data</div>
994 - <button style="padding:8px 18px;border:1px solid #E2E8F0;border-radius:8px;background:#F7FAFC;color:#718096;font-size:13px;cursor:default;">Upload CSV</button>
995 - <span style="font-size:12px;color:#10b981;margin-left:8px;">24 rows loaded</span>
996 - </div>
997 - <div class="mxtpl-demo-section">
998 - <div class="mxtpl-demo-label">2. Content Source</div>
999 - <div class="mxtpl-demo-pills">
1000 - <span class="mxtpl-demo-pill">{city}</span>
1001 - <span class="mxtpl-demo-pill">{state}</span>
1002 - <span class="mxtpl-demo-pill">{service}</span>
1003 - <span class="mxtpl-demo-pill">{phone}</span>
1004 - </div>
1005 - <textarea class="mxtpl-demo-textarea" rows="3" readonly>Write a {comprehensive|detailed|in-depth} service page about {service} in {city}, {state}. Highlight our expertise and include a call to action with {phone}.</textarea>
1006 - </div>
1007 - <div class="mxtpl-demo-section">
1008 - <div class="mxtpl-demo-label">3. Settings</div>
1009 - <div class="mxtpl-demo-grid">
1010 - <div class="mxtpl-demo-field"><label>Content Type</label><select><option>Page</option></select></div>
1011 - <div class="mxtpl-demo-field"><label>Status</label><select><option>Draft</option></select></div>
1012 - <div class="mxtpl-demo-field"><label>Slug Template</label><input type="text" value="{service}-in-{city}" readonly /></div>
1013 - </div>
1014 - </div>
1015 - </div>
1016 - <div class="mxtpl-demo-overlay">
1017 - <span class="mxtpl-demo-badge">PRO ADD-ON</span>
1018 - <h2>Spintax & Template Generator</h2>
1019 - <p>Generate bulk pages from CSV data with spintax variations. Create hundreds of unique, AI-written city pages, service pages, and landing pages.</p>
1020 - <a href="https://mxchat.ai/advanced-content-editor/" target="_blank" class="mxtpl-demo-btn">Get Advanced Content Editor</a>
1021 - </div>
1022 - </div>
1023 - <?php endif; ?>
1024 514 </div>
1025 515
1026 516 </main>
1027 517 </div>