| @@ -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">×</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,30 +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-opus-4-8' => 'Claude Opus 4.8', | |
| 527 | - 'claude-opus-4-7' => 'Claude Opus 4.7', | |
| 528 | 478 | 'claude-opus-4-6' => 'Claude Opus 4.6', |
| 529 | 479 | 'claude-sonnet-4-6' => 'Claude Sonnet 4.6', |
| 530 | 480 | 'claude-haiku-4-5-20251001' => 'Claude Haiku 4.5', |
| 531 | 481 | ), |
| 532 | 482 | 'Google' => array( |
| 533 | - 'gemini-3.5-flash' => 'Gemini 3.5 Flash', | |
| 534 | - 'gemini-3.1-pro-preview' => 'Gemini 3.1 Pro', | |
| 535 | - 'gemini-3-flash-preview' => 'Gemini 3 Flash', | |
| 536 | - 'gemini-3.1-flash-lite' => 'Gemini 3.1 Flash-Lite', | |
| 537 | - 'gemini-3.1-flash-lite-preview' => 'Gemini 3.1 Flash-Lite (Preview)', | |
| 538 | - 'gemini-2.5-pro' => 'Gemini 2.5 Pro', | |
| 539 | - 'gemini-2.5-flash' => 'Gemini 2.5 Flash', | |
| 540 | - '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', | |
| 541 | 485 | ), |
| 542 | 486 | 'xAI' => array( |
| 543 | 487 | 'grok-4-0709' => 'Grok 4', |
| 544 | 488 | 'grok-4-1-fast-non-reasoning' => 'Grok 4.1 Fast', |
| @@ -565,9 +509,8 @@ | ||
| 565 | 509 | <div class="mxch-field-control"> |
| 566 | 510 | <?php $image_model = $options['content_image_model'] ?? 'gpt-image-1.5'; ?> |
| 567 | 511 | <select id="mxch-image-model" data-field="content_image_model" class="mxch-cg-select"> |
| 568 | 512 | <optgroup label="<?php esc_attr_e('OpenAI', 'mxchat'); ?>"> |
| 569 | - <option value="gpt-image-2" <?php selected($image_model, 'gpt-image-2'); ?>><?php esc_html_e('GPT Image 2 (Latest)', 'mxchat'); ?></option> | |
| 570 | 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> |
| 571 | 514 | </optgroup> |
| 572 | 515 | <optgroup label="<?php esc_attr_e('xAI', 'mxchat'); ?>"> |
| 573 | 516 | <option value="grok-imagine-image-pro" <?php selected($image_model, 'grok-imagine-image-pro'); ?>><?php esc_html_e('Grok Imagine Pro', 'mxchat'); ?></option> |
| @@ -581,32 +524,8 @@ | ||
| 581 | 524 | </div> |
| 582 | 525 | <p class="mxch-field-description"><?php esc_html_e('Select the AI model used for generating images within your content.', 'mxchat'); ?></p> |
| 583 | 526 | </div> |
| 584 | 527 | |
| 585 | - <!-- Image Quality (GPT Image only) --> | |
| 586 | - <div class="mxch-field"> | |
| 587 | - <label class="mxch-field-label" for="mxch-image-quality"><?php esc_html_e('Image Quality', 'mxchat'); ?></label> | |
| 588 | - <div class="mxch-field-control"> | |
| 589 | - <?php $image_quality = $options['content_image_quality'] ?? 'auto'; ?> | |
| 590 | - <?php $quality_supported = (strpos($image_model, 'gpt-image') === 0); ?> | |
| 591 | - <select id="mxch-image-quality" data-field="content_image_quality" class="mxch-cg-select"<?php echo $quality_supported ? '' : ' disabled'; ?>> | |
| 592 | - <option value="auto" <?php selected($image_quality, 'auto'); ?>><?php esc_html_e('Auto (default)', 'mxchat'); ?></option> | |
| 593 | - <option value="low" <?php selected($image_quality, 'low'); ?>><?php esc_html_e('Low (fastest, cheapest)', 'mxchat'); ?></option> | |
| 594 | - <option value="medium" <?php selected($image_quality, 'medium'); ?>><?php esc_html_e('Medium', 'mxchat'); ?></option> | |
| 595 | - <option value="high" <?php selected($image_quality, 'high'); ?>><?php esc_html_e('High (best, slowest)', 'mxchat'); ?></option> | |
| 596 | - </select> | |
| 597 | - </div> | |
| 598 | - <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> | |
| 599 | - </div> | |
| 600 | - <script>(function(){ | |
| 601 | - var m = document.getElementById('mxch-image-model'); | |
| 602 | - var q = document.getElementById('mxch-image-quality'); | |
| 603 | - if (!m || !q || q._wired) { return; } q._wired = true; | |
| 604 | - function sync(){ q.disabled = (m.value || '').indexOf('gpt-image') !== 0; } | |
| 605 | - m.addEventListener('change', sync); | |
| 606 | - sync(); | |
| 607 | - })();</script> | |
| 608 | - | |
| 609 | 528 | <!-- Enable Image Generation --> |
| 610 | 529 | <div class="mxch-field"> |
| 611 | 530 | <label class="mxch-toggle"> |
| 612 | 531 | <?php $enable_images = $options['content_enable_images'] ?? 'on'; ?> |
| @@ -985,74 +904,8 @@ | ||
| 985 | 904 | <span class="mxcal-demo-badge">PRO ADD-ON</span> |
| 986 | 905 | <h2>AI Content Calendar</h2> |
| 987 | 906 | <p>Import SEO data and let AI generate a 30-day blog plan with targeted keywords, difficulty scores, and automated post scheduling.</p> |
| 988 | 907 | <a href="https://mxchat.ai/advanced-content-editor/" target="_blank" class="mxcal-demo-btn">Get Advanced Content Editor</a> |
| 989 | - </div> | |
| 990 | - </div> | |
| 991 | - <?php endif; ?> | |
| 992 | - </div> | |
| 993 | - | |
| 994 | - <!-- ======================================== | |
| 995 | - TEMPLATES | |
| 996 | - ======================================== --> | |
| 997 | - <div id="content-templates" class="mxch-section"> | |
| 998 | - <?php if ($pro_template_generator) : ?> | |
| 999 | - <div id="mxtpl-container"></div> | |
| 1000 | - <?php else : ?> | |
| 1001 | - <style> | |
| 1002 | - .mxtpl-demo-wrap { position: relative; } | |
| 1003 | - .mxtpl-demo-blur { filter: blur(3px); pointer-events: none; user-select: none; opacity: 0.7; padding: 24px; } | |
| 1004 | - .mxtpl-demo-overlay { | |
| 1005 | - position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); | |
| 1006 | - z-index: 10; text-align: center; background: rgba(255,255,255,0.95); | |
| 1007 | - border-radius: 16px; padding: 40px 48px; box-shadow: 0 8px 40px rgba(120,115,245,0.15); | |
| 1008 | - border: 1px solid rgba(120,115,245,0.12); max-width: 460px; width: 90%; | |
| 1009 | - } | |
| 1010 | - .mxtpl-demo-overlay h2 { font-size: 22px; font-weight: 700; margin: 0 0 8px; color: #1A202C; } | |
| 1011 | - .mxtpl-demo-overlay p { font-size: 14px; color: #718096; line-height: 1.6; margin: 0 0 20px; } | |
| 1012 | - .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; } | |
| 1013 | - .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); } | |
| 1014 | - .mxtpl-demo-section { margin-bottom: 20px; } | |
| 1015 | - .mxtpl-demo-label { font-size: 14px; font-weight: 700; color: #2D3748; margin-bottom: 8px; } | |
| 1016 | - .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; } | |
| 1017 | - .mxtpl-demo-pills { display: flex; gap: 6px; margin-bottom: 12px; flex-wrap: wrap; } | |
| 1018 | - .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; } | |
| 1019 | - .mxtpl-demo-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; } | |
| 1020 | - .mxtpl-demo-field { display: flex; flex-direction: column; gap: 4px; } | |
| 1021 | - .mxtpl-demo-field label { font-size: 12px; font-weight: 600; color: #718096; } | |
| 1022 | - .mxtpl-demo-field select, .mxtpl-demo-field input { padding: 8px 10px; border: 2px solid #E2E8F0; border-radius: 6px; font-size: 13px; background: #F7FAFC; } | |
| 1023 | - </style> | |
| 1024 | - <div class="mxtpl-demo-wrap"> | |
| 1025 | - <div class="mxtpl-demo-blur"> | |
| 1026 | - <div class="mxtpl-demo-section"> | |
| 1027 | - <div class="mxtpl-demo-label">1. Upload Data</div> | |
| 1028 | - <button style="padding:8px 18px;border:1px solid #E2E8F0;border-radius:8px;background:#F7FAFC;color:#718096;font-size:13px;cursor:default;">Upload CSV</button> | |
| 1029 | - <span style="font-size:12px;color:#10b981;margin-left:8px;">24 rows loaded</span> | |
| 1030 | - </div> | |
| 1031 | - <div class="mxtpl-demo-section"> | |
| 1032 | - <div class="mxtpl-demo-label">2. Content Source</div> | |
| 1033 | - <div class="mxtpl-demo-pills"> | |
| 1034 | - <span class="mxtpl-demo-pill">{city}</span> | |
| 1035 | - <span class="mxtpl-demo-pill">{state}</span> | |
| 1036 | - <span class="mxtpl-demo-pill">{service}</span> | |
| 1037 | - <span class="mxtpl-demo-pill">{phone}</span> | |
| 1038 | - </div> | |
| 1039 | - <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> | |
| 1040 | - </div> | |
| 1041 | - <div class="mxtpl-demo-section"> | |
| 1042 | - <div class="mxtpl-demo-label">3. Settings</div> | |
| 1043 | - <div class="mxtpl-demo-grid"> | |
| 1044 | - <div class="mxtpl-demo-field"><label>Content Type</label><select><option>Page</option></select></div> | |
| 1045 | - <div class="mxtpl-demo-field"><label>Status</label><select><option>Draft</option></select></div> | |
| 1046 | - <div class="mxtpl-demo-field"><label>Slug Template</label><input type="text" value="{service}-in-{city}" readonly /></div> | |
| 1047 | - </div> | |
| 1048 | - </div> | |
| 1049 | - </div> | |
| 1050 | - <div class="mxtpl-demo-overlay"> | |
| 1051 | - <span class="mxtpl-demo-badge">PRO ADD-ON</span> | |
| 1052 | - <h2>Spintax & Template Generator</h2> | |
| 1053 | - <p>Generate bulk pages from CSV data with spintax variations. Create hundreds of unique, AI-written city pages, service pages, and landing pages.</p> | |
| 1054 | - <a href="https://mxchat.ai/advanced-content-editor/" target="_blank" class="mxtpl-demo-btn">Get Advanced Content Editor</a> | |
| 1055 | 908 | </div> |
| 1056 | 909 | </div> |
| 1057 | 910 | <?php endif; ?> |
| 1058 | 911 | </div> |