PluginProbe
MxChat – AI Chatbot & Content Generation for WordPress / 3.1.3
MxChat – AI Chatbot & Content Generation for WordPress v3.1.3
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 -177 3.2.123.1.3 View file →
@@ -23,9 +23,8 @@
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 25 $pro_gsc_integration = apply_filters('mxchat_content_pro_feature', false, 'gsc_integration');
26 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 27 ?>
29 28 <div class="mxch-admin-wrapper">
30 29 <!-- Mobile Header -->
31 30 <header class="mxch-mobile-header">
@@ -73,12 +72,8 @@
73 72 <button class="mxch-mobile-nav-link" data-target="content-calendar">
74 73 <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 74 <span><?php esc_html_e('Calendar', 'mxchat'); ?></span>
76 75 </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 76 </div>
82 77 </nav>
83 78 </div>
84 79
@@ -141,17 +136,8 @@
141 136 </span>
142 137 <span class="mxch-nav-link-text"><?php esc_html_e('Calendar', 'mxchat'); ?></span>
143 138 </button>
144 139 </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 140 </div>
155 141 </nav>
156 142 </aside>
157 143
@@ -232,12 +218,8 @@
232 218 </div>
233 219 </div>
234 220 <div class="mxch-cg-form">
235 221 <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 222 <div class="mxch-cg-options">
241 223 <div class="mxch-cg-option">
242 224 <label class="mxch-cg-option-label" for="mxch-cg-type"><?php esc_html_e('Type', 'mxchat'); ?></label>
243 225 <select id="mxch-cg-type" class="mxch-cg-select">
@@ -272,15 +254,8 @@
272 254 <option value="show"><?php esc_html_e('Show', 'mxchat'); ?></option>
273 255 <option value="hide" selected><?php esc_html_e('Hide (title in content)', 'mxchat'); ?></option>
274 256 </select>
275 257 </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 258 </div>
284 259 <button type="button" id="mxch-cg-generate-btn" class="mxch-cg-generate-btn mxch-cg-generate-btn-full">
285 260 <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 261 <span><?php esc_html_e('Generate Content', 'mxchat'); ?></span>
@@ -294,29 +269,8 @@
294 269 <p class="mxch-cg-progress-text"><?php esc_html_e('Starting...', 'mxchat'); ?></p>
295 270 </div>
296 271 </div>
297 272 </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 273 <!-- Loading indicator (shown during async generation) -->
320 274 <div id="mxch-cg-loading-indicator" class="mxch-cg-loading-indicator" style="display:none;">
321 275 <div class="mxch-cg-loading-spinner">
322 276 <div class="mxch-cg-loading-spinner-ring"></div>
@@ -515,31 +469,20 @@
515 469 <?php
516 470 $content_model = $options['content_model'] ?? ($options['model'] ?? 'gpt-5.1-chat-latest');
517 471 $models = array(
518 472 'OpenAI' => array(
519 - 'gpt-5.5' => 'GPT-5.5',
520 - 'gpt-5.4' => 'GPT-5.4',
521 473 'gpt-5.2' => 'GPT-5.2',
522 474 'gpt-5.1-chat-latest' => 'GPT-5.1',
523 475 'gpt-5' => 'GPT-5',
524 476 ),
525 477 'Anthropic' => array(
526 - 'claude-fable-5' => 'Claude Fable 5',
527 - 'claude-opus-4-8' => 'Claude Opus 4.8',
528 - 'claude-opus-4-7' => 'Claude Opus 4.7',
529 478 'claude-opus-4-6' => 'Claude Opus 4.6',
530 479 'claude-sonnet-4-6' => 'Claude Sonnet 4.6',
531 480 'claude-haiku-4-5-20251001' => 'Claude Haiku 4.5',
532 481 ),
533 482 'Google' => array(
534 - 'gemini-3.5-flash' => 'Gemini 3.5 Flash',
535 - 'gemini-3.1-pro-preview' => 'Gemini 3.1 Pro',
536 - 'gemini-3-flash-preview' => 'Gemini 3 Flash',
537 - 'gemini-3.1-flash-lite' => 'Gemini 3.1 Flash-Lite',
538 - 'gemini-3.1-flash-lite-preview' => 'Gemini 3.1 Flash-Lite (Preview)',
539 - 'gemini-2.5-pro' => 'Gemini 2.5 Pro',
540 - 'gemini-2.5-flash' => 'Gemini 2.5 Flash',
541 - 'gemini-2.5-flash-lite' => 'Gemini 2.5 Flash-Lite',
483 + 'gemini-3-pro-preview' => 'Gemini 3 Pro',
484 + 'gemini-2.5-pro' => 'Gemini 2.5 Pro',
542 485 ),
543 486 'xAI' => array(
544 487 'grok-4-0709' => 'Grok 4',
545 488 'grok-4-1-fast-non-reasoning' => 'Grok 4.1 Fast',
@@ -566,9 +509,8 @@
566 509 <div class="mxch-field-control">
567 510 <?php $image_model = $options['content_image_model'] ?? 'gpt-image-1.5'; ?>
568 511 <select id="mxch-image-model" data-field="content_image_model" class="mxch-cg-select">
569 512 <optgroup label="<?php esc_attr_e('OpenAI', 'mxchat'); ?>">
570 - <option value="gpt-image-2" <?php selected($image_model, 'gpt-image-2'); ?>><?php esc_html_e('GPT Image 2 (Latest)', 'mxchat'); ?></option>
571 513 <option value="gpt-image-1.5" <?php selected($image_model, 'gpt-image-1.5'); ?>><?php esc_html_e('GPT Image 1.5', 'mxchat'); ?></option>
572 514 </optgroup>
573 515 <optgroup label="<?php esc_attr_e('xAI', 'mxchat'); ?>">
574 516 <option value="grok-imagine-image-pro" <?php selected($image_model, 'grok-imagine-image-pro'); ?>><?php esc_html_e('Grok Imagine Pro', 'mxchat'); ?></option>
@@ -582,32 +524,8 @@
582 524 </div>
583 525 <p class="mxch-field-description"><?php esc_html_e('Select the AI model used for generating images within your content.', 'mxchat'); ?></p>
584 526 </div>
585 527
586 - <!-- Image Quality (GPT Image only) -->
587 - <div class="mxch-field">
588 - <label class="mxch-field-label" for="mxch-image-quality"><?php esc_html_e('Image Quality', 'mxchat'); ?></label>
589 - <div class="mxch-field-control">
590 - <?php $image_quality = $options['content_image_quality'] ?? 'auto'; ?>
591 - <?php $quality_supported = (strpos($image_model, 'gpt-image') === 0); ?>
592 - <select id="mxch-image-quality" data-field="content_image_quality" class="mxch-cg-select"<?php echo $quality_supported ? '' : ' disabled'; ?>>
593 - <option value="auto" <?php selected($image_quality, 'auto'); ?>><?php esc_html_e('Auto (default)', 'mxchat'); ?></option>
594 - <option value="low" <?php selected($image_quality, 'low'); ?>><?php esc_html_e('Low (fastest, cheapest)', 'mxchat'); ?></option>
595 - <option value="medium" <?php selected($image_quality, 'medium'); ?>><?php esc_html_e('Medium', 'mxchat'); ?></option>
596 - <option value="high" <?php selected($image_quality, 'high'); ?>><?php esc_html_e('High (best, slowest)', 'mxchat'); ?></option>
597 - </select>
598 - </div>
599 - <p class="mxch-field-description"><?php esc_html_e('Quality control for OpenAI GPT Image models only. Grok Imagine and Gemini image models ignore this setting (their APIs do not expose an equivalent parameter).', 'mxchat'); ?></p>
600 - </div>
601 - <script>(function(){
602 - var m = document.getElementById('mxch-image-model');
603 - var q = document.getElementById('mxch-image-quality');
604 - if (!m || !q || q._wired) { return; } q._wired = true;
605 - function sync(){ q.disabled = (m.value || '').indexOf('gpt-image') !== 0; }
606 - m.addEventListener('change', sync);
607 - sync();
608 - })();</script>
609 -
610 528 <!-- Enable Image Generation -->
611 529 <div class="mxch-field">
612 530 <label class="mxch-toggle">
613 531 <?php $enable_images = $options['content_enable_images'] ?? 'on'; ?>
@@ -617,35 +535,8 @@
617 535 </label>
618 536 <p class="mxch-field-description"><?php esc_html_e('When enabled, AI will generate and place images throughout your content. When disabled, pages are generated with text-only layouts.', 'mxchat'); ?></p>
619 537 </div>
620 538
621 - <!-- Images per Article -->
622 - <div class="mxch-field">
623 - <label class="mxch-field-label" for="mxch-image-count"><?php esc_html_e('Images per Article', 'mxchat'); ?></label>
624 - <div class="mxch-field-control">
625 - <?php $image_count = max(1, min(5, (int) ($options['content_image_count'] ?? 3))); ?>
626 - <?php $images_on = ($options['content_enable_images'] ?? 'on') === 'on'; ?>
627 - <div class="mxch-cg-slider-row">
628 - <input type="range" min="1" max="5" step="1" value="<?php echo esc_attr($image_count); ?>"
629 - data-field="content_image_count" id="mxch-image-count" class="mxch-cg-slider"<?php echo $images_on ? '' : ' disabled'; ?>>
630 - <span id="mxch-image-count-val" class="mxch-cg-slider-value"><?php echo esc_html($image_count); ?></span>
631 - </div>
632 - </div>
633 - <p class="mxch-field-description"><?php esc_html_e('How many images to generate and place in each article (1–5). Default 3. The AI may generate fewer if the article has few sections suited to imagery.', 'mxchat'); ?></p>
634 - </div>
635 - <script>(function(){
636 - var s = document.getElementById('mxch-image-count');
637 - var v = document.getElementById('mxch-image-count-val');
638 - if (!s || !v || s._wired) { return; } s._wired = true;
639 - s.addEventListener('input', function(){ v.textContent = s.value; });
640 - var e = document.querySelector('[data-field="content_enable_images"]');
641 - if (e) {
642 - var syncCount = function(){ s.disabled = !e.checked; };
643 - e.addEventListener('change', syncCount);
644 - syncCount();
645 - }
646 - })();</script>
647 -
648 539 <!-- Internal Linking (Pro) -->
649 540 <div class="mxch-field mxch-cg-pro-field<?php echo $pro_internal_linking ? '' : ' mxch-cg-pro-locked'; ?>">
650 541 <label class="mxch-toggle">
651 542 <?php $internal_linking_val = $options['content_internal_linking'] ?? 'off'; ?>
@@ -1013,74 +904,8 @@
1013 904 <span class="mxcal-demo-badge">PRO ADD-ON</span>
1014 905 <h2>AI Content Calendar</h2>
1015 906 <p>Import SEO data and let AI generate a 30-day blog plan with targeted keywords, difficulty scores, and automated post scheduling.</p>
1016 907 <a href="https://mxchat.ai/advanced-content-editor/" target="_blank" class="mxcal-demo-btn">Get Advanced Content Editor</a>
1017 - </div>
1018 - </div>
1019 - <?php endif; ?>
1020 - </div>
1021 -
1022 - <!-- ========================================
1023 - TEMPLATES
1024 - ======================================== -->
1025 - <div id="content-templates" class="mxch-section">
1026 - <?php if ($pro_template_generator) : ?>
1027 - <div id="mxtpl-container"></div>
1028 - <?php else : ?>
1029 - <style>
1030 - .mxtpl-demo-wrap { position: relative; }
1031 - .mxtpl-demo-blur { filter: blur(3px); pointer-events: none; user-select: none; opacity: 0.7; padding: 24px; }
1032 - .mxtpl-demo-overlay {
1033 - position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
1034 - z-index: 10; text-align: center; background: rgba(255,255,255,0.95);
1035 - border-radius: 16px; padding: 40px 48px; box-shadow: 0 8px 40px rgba(120,115,245,0.15);
1036 - border: 1px solid rgba(120,115,245,0.12); max-width: 460px; width: 90%;
1037 - }
1038 - .mxtpl-demo-overlay h2 { font-size: 22px; font-weight: 700; margin: 0 0 8px; color: #1A202C; }
1039 - .mxtpl-demo-overlay p { font-size: 14px; color: #718096; line-height: 1.6; margin: 0 0 20px; }
1040 - .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; }
1041 - .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); }
1042 - .mxtpl-demo-section { margin-bottom: 20px; }
1043 - .mxtpl-demo-label { font-size: 14px; font-weight: 700; color: #2D3748; margin-bottom: 8px; }
1044 - .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; }
1045 - .mxtpl-demo-pills { display: flex; gap: 6px; margin-bottom: 12px; flex-wrap: wrap; }
1046 - .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; }
1047 - .mxtpl-demo-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; }
1048 - .mxtpl-demo-field { display: flex; flex-direction: column; gap: 4px; }
1049 - .mxtpl-demo-field label { font-size: 12px; font-weight: 600; color: #718096; }
1050 - .mxtpl-demo-field select, .mxtpl-demo-field input { padding: 8px 10px; border: 2px solid #E2E8F0; border-radius: 6px; font-size: 13px; background: #F7FAFC; }
1051 - </style>
1052 - <div class="mxtpl-demo-wrap">
1053 - <div class="mxtpl-demo-blur">
1054 - <div class="mxtpl-demo-section">
1055 - <div class="mxtpl-demo-label">1. Upload Data</div>
1056 - <button style="padding:8px 18px;border:1px solid #E2E8F0;border-radius:8px;background:#F7FAFC;color:#718096;font-size:13px;cursor:default;">Upload CSV</button>
1057 - <span style="font-size:12px;color:#10b981;margin-left:8px;">24 rows loaded</span>
1058 - </div>
1059 - <div class="mxtpl-demo-section">
1060 - <div class="mxtpl-demo-label">2. Content Source</div>
1061 - <div class="mxtpl-demo-pills">
1062 - <span class="mxtpl-demo-pill">{city}</span>
1063 - <span class="mxtpl-demo-pill">{state}</span>
1064 - <span class="mxtpl-demo-pill">{service}</span>
1065 - <span class="mxtpl-demo-pill">{phone}</span>
1066 - </div>
1067 - <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>
1068 - </div>
1069 - <div class="mxtpl-demo-section">
1070 - <div class="mxtpl-demo-label">3. Settings</div>
1071 - <div class="mxtpl-demo-grid">
1072 - <div class="mxtpl-demo-field"><label>Content Type</label><select><option>Page</option></select></div>
1073 - <div class="mxtpl-demo-field"><label>Status</label><select><option>Draft</option></select></div>
1074 - <div class="mxtpl-demo-field"><label>Slug Template</label><input type="text" value="{service}-in-{city}" readonly /></div>
1075 - </div>
1076 - </div>
1077 - </div>
1078 - <div class="mxtpl-demo-overlay">
1079 - <span class="mxtpl-demo-badge">PRO ADD-ON</span>
1080 - <h2>Spintax & Template Generator</h2>
1081 - <p>Generate bulk pages from CSV data with spintax variations. Create hundreds of unique, AI-written city pages, service pages, and landing pages.</p>
1082 - <a href="https://mxchat.ai/advanced-content-editor/" target="_blank" class="mxtpl-demo-btn">Get Advanced Content Editor</a>
1083 908 </div>
1084 909 </div>
1085 910 <?php endif; ?>
1086 911 </div>