Initial commit: igny8 project

This commit is contained in:
igny8
2025-11-09 10:27:02 +00:00
commit 60b8188111
27265 changed files with 4360521 additions and 0 deletions

View File

@@ -0,0 +1,841 @@
<?php
/**
* ==========================
* 🔐 IGNY8 FILE RULE HEADER
* ==========================
* @file : docs.php
* @location : /modules/help/docs.php
* @type : Admin Page
* @scope : Module Only
* @allowed : Technical documentation, API reference, architecture overview
* @reusability : Single Use
* @notes : Technical documentation page for help module
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Start output buffering
ob_start();
?>
<!-- System Overview Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Igny8 AI SEO - Complete Technical Snapshot</h3>
<p class="igny8-card-subtitle">Comprehensive AI-powered SEO operating system for WordPress</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-admin-site igny8-dashboard-icon-lg igny8-dashboard-icon-blue"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>System Architecture</h4>
<p>Igny8 is a sophisticated WordPress plugin that combines AI automation with configuration-driven architecture to deliver enterprise-level SEO functionality.</p>
<ul>
<li><strong>Modular Design:</strong> Independent modules with clear interfaces</li>
<li><strong>AI-Centric:</strong> OpenAI integration for intelligent automation</li>
<li><strong>Configuration-Driven:</strong> All UI components render from configuration files</li>
<li><strong>Automation-First:</strong> CRON-based workflows for hands-off operation</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Core Modules</h4>
<p>Eight main modules provide comprehensive SEO functionality across the entire content lifecycle.</p>
<ul>
<li><strong>Planner:</strong> Keyword research, clustering, and content planning</li>
<li><strong>Writer:</strong> AI-powered content generation and task management</li>
<li><strong>Analytics:</strong> Performance tracking and SEO analytics</li>
<li><strong>Schedules:</strong> Automated task scheduling and CRON management</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Technical Stack</h4>
<p>Built on WordPress with advanced AI integration and modern web technologies.</p>
<ul>
<li><strong>Backend:</strong> PHP 7.4+, WordPress 5.0+, MySQL 5.7+</li>
<li><strong>AI Integration:</strong> OpenAI GPT-4, GPT-3.5-turbo</li>
<li><strong>Frontend:</strong> Vanilla JavaScript, CSS3, HTML5</li>
<li><strong>Database:</strong> 15 custom tables, WordPress integration</li>
</ul>
</div>
</div>
</div>
</div>
<!-- File Structure Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Complete File Structure</h3>
<p class="igny8-card-subtitle">Organized file tree with detailed descriptions</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-media-code igny8-dashboard-icon-lg igny8-dashboard-icon-purple"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-file-tree">
<pre><code>igny8-ai-seo/
├── igny8.php # Main plugin bootstrap and initialization
├── install.php # Database setup and plugin activation
├── uninstall.php # Plugin cleanup and data removal
├── igny8-wp-load-handler.php # CRON endpoint handler
├── CHANGELOG.md # Version history and changes
├── ai/ # AI Integration System (5 files)
│ ├── integration.php # API key setup and connection management
│ ├── modules-ai.php # Common AI interface for modules
│ ├── model-rates-config.php # AI model pricing and rate limits
│ ├── openai-api.php # OpenAI API integration and AI functions
│ └── prompts-library.php # AI prompts library and templates
├── assets/ # Frontend Assets
│ ├── css/
│ │ └── core.css # Main stylesheet (2000+ lines)
│ ├── js/
│ │ └── core.js # Main JavaScript (1000+ lines)
│ ├── templates/ # CSV templates for import/export
│ │ ├── igny8_clusters_template.csv
│ │ ├── igny8_ideas_template.csv
│ │ └── igny8_keywords_template.csv
│ └── ai-images/ # AI-generated images
├── core/ # Core System Files
│ ├── admin/ # Admin Interface System (7 files)
│ │ ├── ajax.php # Centralized AJAX endpoint management
│ │ ├── global-helpers.php # Global utility functions (50+ helpers)
│ │ ├── init.php # Admin initialization and settings registration
│ │ ├── menu.php # WordPress admin menu registration
│ │ ├── meta-boxes.php # WordPress meta boxes integration
│ │ ├── module-manager-class.php # Module management system
│ │ └── routing.php # Admin page routing and content rendering
│ ├── cron/ # CRON System (2 files)
│ │ ├── igny8-cron-handlers.php # CRON task handlers
│ │ └── igny8-cron-master-dispatcher.php # CRON master dispatcher
│ ├── db/ # Database System (2 files)
│ │ ├── db.php # Database operations, schema, and utilities
│ │ └── db-migration.php # Version-based migration system
│ ├── pages/ # Admin Page Templates (organized by module)
│ │ ├── analytics/ # Analytics module pages (2 files)
│ │ │ ├── analytics.php # Analytics and reporting interface
│ │ │ └── status.php # System status and health monitoring
│ │ ├── cron/ # CRON management pages
│ │ ├── help/ # Help and documentation pages (2 files)
│ │ │ ├── docs.php # Technical documentation page
│ │ │ └── help.php # User guide and support page
│ │ ├── settings/ # Settings module pages (4 files)
│ │ │ ├── general-settings.php # General plugin settings interface
│ │ │ ├── import-export.php # Data import/export interface
│ │ │ ├── integration.php # API integration settings interface
│ │ │ └── schedules.php # Scheduling and automation interface
│ │ └── thinker/ # Thinker module pages (5 files)
│ │ ├── image-testing.php # Image testing interface
│ │ ├── main.php # Thinker main interface
│ │ ├── profile.php # Thinker profile interface
│ │ ├── prompts.php # Prompts management interface
│ │ └── strategies.php # Strategies interface
│ └── global-layout.php # Master UI layout template
├── debug/ # Debug & Monitoring System (5 files)
│ ├── debug.php # Debug functionality (redirected to status)
│ ├── module-debug.php # Module-specific debugging utilities
│ ├── monitor-helpers.php # Monitoring helper functions
│ ├── system-testing.php # System testing utilities
│ └── temp-function-testing.php # Function testing utilities
├── docs/ # Documentation System (8 files)
│ ├── HOW_TO_ADD_COLUMN.md # Database column addition guide
│ ├── IGNY8_SNAPSHOT_V0.1.md # Complete plugin snapshot
│ ├── MASTER_ARCHITECTURE.md # Master architecture documentation
│ ├── how-tos/ # How-to guides (5 files)
│ │ ├── 01-adding-new-pages-and-modules.md
│ │ ├── 02-adding-new-modules-to-module-manager.md
│ │ ├── 03-auto-clustering-system.md
│ │ ├── cron-management.md
│ │ └── HOW_TO_ADD_COLUMN.md
│ └── parts/ # Architecture parts (2 files)
│ ├── AI_INTEGRATION_ARCHITECTURE.md
│ └── AUTOMATION_FLOWS.md
├── flows/ # Automation & Workflow System (3 files)
│ ├── sync-ajax.php # Automation-specific AJAX handlers
│ ├── sync-functions.php # Core automation logic and workflow functions
│ └── sync-hooks.php # Workflow hook definitions and registration
└── modules/ # Module System
├── components/ # Reusable UI Components (8 files)
│ ├── actions-tpl.php # Action buttons template
│ ├── export-modal-tpl.php # Export modal template
│ ├── filters-tpl.php # Filter controls template
│ ├── forms-tpl.php # Form rendering template
│ ├── import-modal-tpl.php # Import modal template
│ ├── kpi-tpl.php # KPI display template
│ ├── pagination-tpl.php # Pagination controls template
│ └── table-tpl.php # Data table template
├── config/ # Configuration Files (5 files)
│ ├── filters-config.php # Filter configuration definitions
│ ├── forms-config.php # Form configuration definitions
│ ├── import-export-config.php # Import/export configuration
│ ├── kpi-config.php # KPI configuration definitions
│ └── tables-config.php # Table configuration definitions
└── modules-pages/ # Module Page Interfaces
├── linker.php # Linker module interface
├── optimizer.php # Optimizer module interface
├── planner.php # Planner module interface
├── writer.php # Writer module interface
└── personalize/ # Personalization Module (7 files)
├── content-generation.php # Content generation interface
├── front-end.php # Frontend personalization
├── personalize.ajax # Personalization AJAX handlers
├── personalize.js # Personalization JavaScript
├── personalize.php # Personalize module main interface
├── rewrites.php # Content rewriting interface
└── Settings.php # Personalization settings</code></pre>
</div>
</div>
</div>
<!-- Database Schema Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Database Architecture</h3>
<p class="igny8-card-subtitle">15 custom tables with comprehensive relationships</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-database igny8-dashboard-icon-lg igny8-dashboard-icon-green"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Core Data Tables</h4>
<ul>
<li><strong>igny8_keywords</strong> - Keyword research data with metrics</li>
<li><strong>igny8_clusters</strong> - Content topic groupings with stored metrics</li>
<li><strong>igny8_content_ideas</strong> - AI-generated content concepts</li>
<li><strong>igny8_tasks</strong> - Writer workflow management</li>
<li><strong>igny8_variations</strong> - Personalization content cache</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Analytics & Tracking</h4>
<ul>
<li><strong>igny8_logs</strong> - System audit trail and AI event logging</li>
<li><strong>igny8_ai_queue</strong> - AI processing queue with retry logic</li>
<li><strong>igny8_campaigns</strong> - Link building campaign management</li>
<li><strong>igny8_backlinks</strong> - Backlink monitoring and tracking</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>WordPress Integration</h4>
<ul>
<li><strong>wp_options</strong> - Plugin settings (38+ options)</li>
<li><strong>wp_posts</strong> - Generated WordPress content</li>
<li><strong>wp_postmeta</strong> - Custom post meta fields (6 fields)</li>
<li><strong>wp_terms</strong> - Custom taxonomies (sectors, clusters)</li>
</ul>
</div>
</div>
<div class="igny8-data-flow">
<h4>Data Flow Architecture</h4>
<pre><code>Keywords → Clusters → Ideas → Tasks → WordPress Posts
↓ ↓ ↓ ↓
Mapping → Posts ← Variations (Personalization)
Campaigns → Sites → Backlinks</code></pre>
</div>
</div>
</div>
<!-- AI Integration Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>AI Integration System</h3>
<p class="igny8-card-subtitle">OpenAI integration with cost tracking and automation</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-robot igny8-dashboard-icon-lg igny8-dashboard-icon-orange"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>AI Functions</h4>
<ul>
<li><strong>Content Generation:</strong> Blog posts, landing pages, product descriptions</li>
<li><strong>Keyword Analysis:</strong> Intent detection, difficulty scoring, clustering</li>
<li><strong>SEO Optimization:</strong> Meta descriptions, title optimization</li>
<li><strong>Personalization:</strong> Audience-specific content variations</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Model Configuration</h4>
<ul>
<li><strong>GPT-4:</strong> Primary model for complex tasks</li>
<li><strong>GPT-3.5-turbo:</strong> Fallback for cost optimization</li>
<li><strong>Rate Limiting:</strong> Automatic retry with exponential backoff</li>
<li><strong>Cost Tracking:</strong> Daily budget limits and usage monitoring</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>AI Queue System</h4>
<ul>
<li><strong>Queue Processing:</strong> Background AI task processing</li>
<li><strong>Retry Logic:</strong> Automatic retry for failed requests</li>
<li><strong>Priority System:</strong> Task prioritization for efficient processing</li>
<li><strong>Error Handling:</strong> Comprehensive error logging and recovery</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Automation Workflows Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Automation Workflows</h3>
<p class="igny8-card-subtitle">Event-driven automation with CRON scheduling</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-update igny8-dashboard-icon-lg igny8-dashboard-icon-purple"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-workflow-examples">
<div class="igny8-workflow">
<h4>Keyword Processing Workflow</h4>
<pre><code>// When keywords are imported/updated
igny8_handle_keyword_cluster_update($keyword_id) {
// Update cluster metrics
igny8_update_cluster_metrics($cluster_id);
// Trigger AI clustering if enabled
if (ai_enabled) {
igny8_ajax_ai_cluster_keywords($keyword_ids);
}
}</code></pre>
</div>
<div class="igny8-workflow">
<h4>Content Generation Workflow</h4>
<pre><code>// When content ideas are created
igny8_create_task_from_idea($idea_id) {
// Create writer task
$task_id = create_task($idea_data);
// Generate content if AI enabled
if (ai_enabled) {
igny8_ajax_ai_generate_content($task_id);
}
// Update metrics
igny8_update_idea_metrics($idea_id);
}</code></pre>
</div>
<div class="igny8-workflow">
<h4>Cluster Management Workflow</h4>
<pre><code>// When clusters are created/updated
igny8_auto_create_cluster_term($cluster_id) {
// Create WordPress taxonomy term
$term_id = wp_insert_term($cluster_name, 'clusters');
// Link cluster to term
update_cluster_term_id($cluster_id, $term_id);
// Update metrics
igny8_update_cluster_metrics($cluster_id);
}</code></pre>
</div>
</div>
</div>
</div>
<!-- Configuration System Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Configuration System</h3>
<p class="igny8-card-subtitle">Configuration-driven UI with reusable components</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-admin-tools igny8-dashboard-icon-lg igny8-dashboard-icon-blue"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Table Configuration</h4>
<p>Dynamic table rendering with sorting, filtering, and pagination based on configuration files.</p>
<ul>
<li><strong>Column Definitions:</strong> Field types, labels, and display options</li>
<li><strong>Sorting & Filtering:</strong> Configurable sort and filter options</li>
<li><strong>Actions:</strong> Bulk operations and individual record actions</li>
<li><strong>Pagination:</strong> Configurable page sizes and navigation</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Form Configuration</h4>
<p>Dynamic form generation with validation and field types based on configuration.</p>
<ul>
<li><strong>Field Types:</strong> Text, number, select, textarea, date, etc.</li>
<li><strong>Validation:</strong> Required fields, data types, and custom validation</li>
<li><strong>Lookup Fields:</strong> Foreign key relationships and dropdown options</li>
<li><strong>Conditional Logic:</strong> Show/hide fields based on other field values</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>KPI Configuration</h4>
<p>Dynamic metrics display with charts and trend indicators based on configuration.</p>
<ul>
<li><strong>Metric Types:</strong> Count, sum, average, percentage calculations</li>
<li><strong>Visualization:</strong> Charts, graphs, and trend indicators</li>
<li><strong>Filtering:</strong> Date ranges and conditional filtering</li>
<li><strong>Real-time Updates:</strong> Live data updates and caching</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Security & Performance Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Security & Performance</h3>
<p class="igny8-card-subtitle">Enterprise-level security and optimization</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-shield igny8-dashboard-icon-lg igny8-dashboard-icon-red"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Security Measures</h4>
<ul>
<li><strong>Nonce Verification:</strong> All AJAX requests protected with WordPress nonces</li>
<li><strong>Capability Checks:</strong> User permission validation for all operations</li>
<li><strong>Data Sanitization:</strong> All input data sanitized and validated</li>
<li><strong>SQL Injection Protection:</strong> Prepared statements for all database queries</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Performance Optimizations</h4>
<ul>
<li><strong>Conditional Loading:</strong> Admin assets only loaded when needed</li>
<li><strong>Database Indexing:</strong> Optimized indexes on frequently queried fields</li>
<li><strong>Caching:</strong> WordPress transients for expensive operations</li>
<li><strong>Lazy Loading:</strong> AJAX-based data loading for large datasets</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Monitoring & Debugging</h4>
<ul>
<li><strong>Real-time Monitoring:</strong> Live system health monitoring</li>
<li><strong>Module Debug:</strong> Individual module performance tracking</li>
<li><strong>Error Logging:</strong> Comprehensive error tracking and reporting</li>
<li><strong>Performance Metrics:</strong> Response times and resource usage</li>
</ul>
</div>
</div>
</div>
</div>
<!-- API Reference Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>API Reference</h3>
<p class="igny8-card-subtitle">Complete function and endpoint documentation</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-book igny8-dashboard-icon-lg igny8-dashboard-icon-green"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-api-reference">
<div class="igny8-api-section">
<h4>Core Functions</h4>
<div class="igny8-grid-2">
<div>
<h5>Database Functions</h5>
<ul>
<li><strong>igny8_create_all_tables()</strong> - Create all database tables</li>
<li><strong>igny8_register_taxonomies()</strong> - Register custom taxonomies</li>
<li><strong>igny8_register_post_meta()</strong> - Register custom post meta</li>
<li><strong>igny8_install_database()</strong> - Complete plugin installation</li>
</ul>
</div>
<div>
<h5>Admin Functions</h5>
<ul>
<li><strong>igny8_get_cluster_options()</strong> - Get cluster dropdown options</li>
<li><strong>igny8_get_sector_options()</strong> - Get sector dropdown options</li>
<li><strong>igny8_render_table()</strong> - Render dynamic tables</li>
<li><strong>igny8_render_filters()</strong> - Render filter controls</li>
</ul>
</div>
</div>
</div>
<div class="igny8-api-section">
<h4>AI Functions</h4>
<div class="igny8-grid-2">
<div>
<h5>Content Generation</h5>
<ul>
<li><strong>igny8_generate_blog_post()</strong> - Generate blog post content</li>
<li><strong>igny8_generate_landing_page()</strong> - Generate landing page content</li>
<li><strong>igny8_generate_product_description()</strong> - Generate product content</li>
<li><strong>igny8_generate_seo_meta()</strong> - Generate SEO meta data</li>
</ul>
</div>
<div>
<h5>AI Analysis</h5>
<ul>
<li><strong>igny8_ai_analyze_keywords()</strong> - Analyze keywords using AI</li>
<li><strong>igny8_ai_cluster_keywords()</strong> - Cluster keywords using AI</li>
<li><strong>igny8_ai_generate_ideas()</strong> - Generate content ideas</li>
<li><strong>igny8_ai_optimize_content()</strong> - Optimize existing content</li>
</ul>
</div>
</div>
</div>
<div class="igny8-api-section">
<h4>Automation Functions</h4>
<div class="igny8-grid-2">
<div>
<h5>Workflow Functions</h5>
<ul>
<li><strong>igny8_update_cluster_metrics()</strong> - Update cluster metrics</li>
<li><strong>igny8_update_idea_metrics()</strong> - Update idea metrics</li>
<li><strong>igny8_workflow_triggers()</strong> - Trigger workflow automation</li>
<li><strong>igny8_bulk_delete_keywords()</strong> - Bulk delete keywords</li>
</ul>
</div>
<div>
<h5>AJAX Endpoints</h5>
<ul>
<li><strong>wp_ajax_igny8_get_table_data</strong> - Get table data</li>
<li><strong>wp_ajax_igny8_save_record</strong> - Save/update record</li>
<li><strong>wp_ajax_igny8_ai_generate_content</strong> - AI content generation</li>
<li><strong>wp_ajax_igny8_bulk_action</strong> - Perform bulk actions</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Development Workflow Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Development Workflow</h3>
<p class="igny8-card-subtitle">Guidelines for extending and maintaining the plugin</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-editor-code igny8-dashboard-icon-lg igny8-dashboard-icon-purple"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Adding New Modules</h4>
<ol>
<li>Create module page in <code>modules/modules-pages/</code></li>
<li>Update module manager in <code>core/admin/module-manager-class.php</code></li>
<li>Add table, form, and filter configurations</li>
<li>Register routes in <code>core/admin/routing.php</code></li>
<li>Add menu items in <code>core/admin/menu.php</code></li>
</ol>
</div>
<div class="igny8-module-section">
<h4>Adding New Tables</h4>
<ol>
<li>Add database schema to <code>core/db/db.php</code></li>
<li>Create migration in <code>core/db/db-migration.php</code></li>
<li>Add table configuration to <code>modules/config/tables-config.php</code></li>
<li>Add form configuration to <code>modules/config/forms-config.php</code></li>
<li>Add filter configuration to <code>modules/config/filters-config.php</code></li>
</ol>
</div>
<div class="igny8-module-section">
<h4>Adding AI Features</h4>
<ol>
<li>Add prompt template to <code>ai/prompts-library.php</code></li>
<li>Add AI handler to <code>ai/modules-ai.php</code></li>
<li>Add queue processing to <code>flows/sync-functions.php</code></li>
<li>Add AJAX endpoint to <code>flows/sync-ajax.php</code></li>
</ol>
</div>
</div>
</div>
</div>
<style>
.igny8-help-page {
max-width: 1200px;
margin: 0 auto;
}
.igny8-standard-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px;
border-radius: 8px;
margin-bottom: 20px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.igny8-card-header-content {
display: flex;
align-items: center;
justify-content: space-between;
}
.igny8-card-title-text h3 {
margin: 0 0 8px 0;
font-size: 24px;
font-weight: 600;
}
.igny8-card-subtitle {
margin: 0;
font-size: 16px;
opacity: 0.9;
}
.igny8-dashboard-icon-lg {
font-size: 32px;
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
}
.igny8-dashboard-icon-blue { color: #3b82f6; }
.igny8-dashboard-icon-green { color: #10b981; }
.igny8-dashboard-icon-purple { color: #8b5cf6; }
.igny8-dashboard-icon-orange { color: #f59e0b; }
.igny8-dashboard-icon-red { color: #ef4444; }
.igny8-module-overview {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
}
.igny8-module-section {
background: #f8fafc;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #3b82f6;
}
.igny8-module-section h4 {
margin: 0 0 12px 0;
color: #1f2937;
font-size: 18px;
}
.igny8-module-section p {
margin: 0 0 15px 0;
color: #6b7280;
line-height: 1.6;
}
.igny8-module-section ul {
margin: 0;
padding-left: 20px;
}
.igny8-module-section li {
margin-bottom: 8px;
color: #374151;
line-height: 1.5;
}
.igny8-file-tree {
background: #1f2937;
color: #f9fafb;
padding: 20px;
border-radius: 8px;
overflow-x: auto;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 13px;
line-height: 1.5;
}
.igny8-file-tree pre {
margin: 0;
white-space: pre-wrap;
word-wrap: break-word;
}
.igny8-data-flow {
margin-top: 20px;
padding: 20px;
background: #f8fafc;
border-radius: 8px;
border-left: 4px solid #10b981;
}
.igny8-data-flow pre {
background: #1f2937;
color: #f9fafb;
padding: 15px;
border-radius: 6px;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 13px;
overflow-x: auto;
}
.igny8-workflow-examples {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
gap: 20px;
}
.igny8-workflow {
background: #f8fafc;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #8b5cf6;
}
.igny8-workflow h4 {
margin: 0 0 15px 0;
color: #1f2937;
font-size: 16px;
}
.igny8-workflow pre {
background: #1f2937;
color: #f9fafb;
padding: 15px;
border-radius: 6px;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 12px;
overflow-x: auto;
margin: 0;
}
.igny8-api-reference {
display: flex;
flex-direction: column;
gap: 30px;
}
.igny8-api-section {
background: #f8fafc;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #3b82f6;
}
.igny8-api-section h4 {
margin: 0 0 20px 0;
color: #1f2937;
font-size: 18px;
}
.igny8-api-section h5 {
margin: 0 0 10px 0;
color: #374151;
font-size: 14px;
font-weight: 600;
}
.igny8-api-section ul {
margin: 0;
padding-left: 20px;
}
.igny8-api-section li {
margin-bottom: 6px;
color: #4b5563;
line-height: 1.4;
font-size: 13px;
}
.igny8-api-section code {
background: #e5e7eb;
padding: 2px 6px;
border-radius: 3px;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 12px;
}
@media (max-width: 768px) {
.igny8-card-header-content {
flex-direction: column;
text-align: center;
gap: 15px;
}
.igny8-module-overview,
.igny8-workflow-examples {
grid-template-columns: 1fr;
}
.igny8-file-tree {
font-size: 11px;
}
}
</style>

View File

@@ -0,0 +1,122 @@
<?php
/**
* ==========================
* 🔐 IGNY8 FILE RULE HEADER
* ==========================
* @file : function-testing.php
* @location : /modules/help/function-testing.php
* @type : Debug Tool
* @scope : Module Only
* @allowed : Function testing, development tools, debugging functions
* @reusability : Single Use
* @notes : Function testing interface for help module (dev-only)
*/
// Note: AJAX handlers are now registered in core/admin/ajax.php
// This file only contains the HTML interface for testing
?>
<div class="wrap">
<h1>Test Page</h1>
<p>This is a test page</p>
<h2>AJAX Text Input Test</h2>
<form id="ajax-text-form">
<input type="hidden" id="ajax_text_nonce" name="ajax_text_nonce" value="<?php echo wp_create_nonce('ajax_text_action'); ?>" />
<table class="form-table">
<tr>
<th scope="row">
<label for="ajax_text_input">Test Text Input</label>
</th>
<td>
<input type="text" id="ajax_text_input" name="ajax_text_input" value="<?php echo esc_attr(get_option('igny8_ajax_test_text', '')); ?>" class="regular-text" placeholder="Enter some text to save via AJAX" />
<p class="description">This text will be saved using AJAX without page reload</p>
</td>
</tr>
</table>
<button type="button" id="ajax-save-btn" class="button button-primary">Save Text via AJAX</button>
<button type="button" id="ajax-test-btn" class="button button-secondary">Test AJAX</button>
<span id="ajax-status" style="margin-left: 10px;"></span>
</form>
<hr>
<script type="text/javascript">
jQuery(document).ready(function($){
// Test AJAX button
$('#ajax-test-btn').click(function(e){
e.preventDefault();
$('#ajax-status').html('<span style="color: blue;">Testing AJAX...</span>');
$.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'igny8_test_ajax'
},
success: function(response){
if (response.success) {
$('#ajax-status').html('<span style="color: green;">✓ ' + response.data + '</span>');
} else {
$('#ajax-status').html('<span style="color: red;">✗ Test failed: ' + response.data + '</span>');
}
},
error: function(){
$('#ajax-status').html('<span style="color: red;">✗ AJAX connection failed</span>');
}
});
});
// Save AJAX button
$('#ajax-save-btn').click(function(e){
e.preventDefault();
var textValue = $('#ajax_text_input').val().trim();
if (!textValue) {
$('#ajax-status').html('<span style="color: red;">Please enter some text</span>');
return;
}
// Show loading state
$('#ajax-status').html('<span style="color: blue;">Saving...</span>');
$('#ajax-save-btn').prop('disabled', true);
$.ajax({
url: ajaxurl,
type: 'POST',
data: {
action: 'igny8_save_ajax_text',
ajax_text_input: textValue,
ajax_text_nonce: $('#ajax_text_nonce').val()
},
success: function(response){
if (response.success) {
$('#ajax-status').html('<span style="color: green;">✓ ' + response.data + '</span>');
// Update the input field to show the saved value
$('#ajax_text_input').val(textValue);
} else {
$('#ajax-status').html('<span style="color: red;">✗ Error: ' + response.data + '</span>');
}
},
error: function(xhr, status, error){
$('#ajax-status').html('<span style="color: red;">✗ AJAX Error: ' + error + '</span>');
},
complete: function(){
$('#ajax-save-btn').prop('disabled', false);
}
});
});
});
</script>
</div>
<?php
// Note: This file is included by help.php, so no need to capture content or include layout
// The content will be captured by the parent help.php file
?>

View File

@@ -0,0 +1,834 @@
<?php
/**
* ==========================
* 🔐 IGNY8 FILE RULE HEADER
* ==========================
* @file : help.php
* @location : /modules/help/help.php
* @type : Admin Page
* @scope : Module Only
* @allowed : Help content, documentation, user guides, subpage routing
* @reusability : Single Use
* @notes : Main help page with subpage routing for help module
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Handle URL parameters for subpages
$subpage = $_GET['sp'] ?? 'help';
$GLOBALS['current_subpage'] = $subpage;
$GLOBALS['current_module'] = 'help';
// Start output buffering
ob_start();
switch ($subpage) {
case 'docs':
include plugin_dir_path(__FILE__) . 'docs.php';
break;
case 'system-testing':
include plugin_dir_path(__FILE__) . 'system-testing.php';
break;
case 'function-testing':
include plugin_dir_path(__FILE__) . 'function-testing.php';
break;
case 'help':
default:
// Main help content (existing content below)
?>
<div class="igny8-help-page">
<!-- Welcome Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Welcome to Igny8 AI SEO</h3>
<p class="igny8-card-subtitle">Your complete AI-powered SEO solution for WordPress</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-admin-site igny8-dashboard-icon-lg igny8-dashboard-icon-blue"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<p>Igny8 is a comprehensive AI-powered SEO plugin that helps you research keywords, plan content, and optimize your website for search engines using artificial intelligence. Transform your content strategy with intelligent automation and AI-driven insights.</p>
<div class="igny8-feature-highlights">
<div class="igny8-feature-item">
<span class="dashicons dashicons-search"></span>
<strong>Smart Keyword Research</strong> - AI-powered keyword analysis and clustering
</div>
<div class="igny8-feature-item">
<span class="dashicons dashicons-edit"></span>
<strong>Content Generation</strong> - Create high-quality content with AI assistance
</div>
<div class="igny8-feature-item">
<span class="dashicons dashicons-chart-line"></span>
<strong>Performance Tracking</strong> - Monitor your SEO progress and results
</div>
</div>
</div>
</div>
<!-- Getting Started Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Getting Started</h3>
<p class="igny8-card-subtitle">Set up your AI-powered SEO workflow in minutes</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-arrow-right-alt igny8-dashboard-icon-lg igny8-dashboard-icon-green"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<div class="igny8-step-header">
<span class="igny8-step-number">1</span>
<h4>Configure AI Integration</h4>
</div>
<p>Go to <strong>Settings > AI Integration</strong> and enter your OpenAI API key. Choose your preferred AI model (GPT-4 recommended for best results).</p>
<ul>
<li><strong>API Key Setup:</strong> Enter your OpenAI API key for AI functionality</li>
<li><strong>Model Selection:</strong> Choose between GPT-4, GPT-3.5-turbo, or other available models</li>
<li><strong>Cost Management:</strong> Set daily limits to control API usage costs</li>
<li><strong>Testing:</strong> Test your AI integration to ensure everything works properly</li>
</ul>
<div class="igny8-step-tip">
<strong>💡 Tip:</strong> You can get an OpenAI API key from platform.openai.com
</div>
</div>
<div class="igny8-module-section">
<div class="igny8-step-header">
<span class="igny8-step-number">2</span>
<h4>Import Your Keywords</h4>
</div>
<p>Navigate to <strong>Planner > Keywords</strong> and import your keyword list or add keywords manually. Set search volume, difficulty, and intent for each keyword.</p>
<ul>
<li><strong>Bulk Import:</strong> Upload CSV files with keyword data</li>
<li><strong>Manual Entry:</strong> Add keywords one by one with detailed metrics</li>
<li><strong>Data Enrichment:</strong> Set search volume, difficulty, and CPC data</li>
<li><strong>Intent Classification:</strong> Categorize keywords by user intent</li>
</ul>
<div class="igny8-step-tip">
<strong>💡 Tip:</strong> Use the bulk import feature to add multiple keywords at once
</div>
</div>
<div class="igny8-module-section">
<div class="igny8-step-header">
<span class="igny8-step-number">3</span>
<h4>Create Content Clusters</h4>
</div>
<p>Go to <strong>Planner > Clusters</strong> and group related keywords into content topics. Use AI clustering to automatically organize your keywords.</p>
<ul>
<li><strong>AI Clustering:</strong> Automatically group related keywords using AI</li>
<li><strong>Manual Organization:</strong> Create custom clusters for specific topics</li>
<li><strong>Cluster Metrics:</strong> Track keyword count, volume, and difficulty</li>
<li><strong>Content Mapping:</strong> Link clusters to published content</li>
</ul>
<div class="igny8-step-tip">
<strong>💡 Tip:</strong> Let AI suggest cluster groupings for faster organization
</div>
</div>
<div class="igny8-module-section">
<div class="igny8-step-header">
<span class="igny8-step-number">4</span>
<h4>Generate Content Ideas</h4>
</div>
<p>Visit <strong>Planner > Ideas</strong> to generate AI-powered content ideas based on your clusters. Refine and prepare ideas for content creation.</p>
<ul>
<li><strong>AI Generation:</strong> Create content ideas using artificial intelligence</li>
<li><strong>Keyword Integration:</strong> Ideas include target keywords and topics</li>
<li><strong>Content Types:</strong> Generate ideas for blog posts, guides, and more</li>
<li><strong>Idea Management:</strong> Organize and prioritize content ideas</li>
</ul>
<div class="igny8-step-tip">
<strong>💡 Tip:</strong> Generate multiple ideas per cluster for content variety
</div>
</div>
<div class="igny8-module-section">
<div class="igny8-step-header">
<span class="igny8-step-number">5</span>
<h4>Create and Publish Content</h4>
</div>
<p>Go to <strong>Writer > Tasks</strong> to create content tasks from your ideas. Use AI to generate content or write manually, then publish directly to your site.</p>
<ul>
<li><strong>Task Creation:</strong> Convert ideas into actionable content tasks</li>
<li><strong>AI Content Generation:</strong> Generate high-quality content using AI</li>
<li><strong>Content Review:</strong> Edit and refine content before publishing</li>
<li><strong>Direct Publishing:</strong> Publish content directly to your WordPress site</li>
</ul>
<div class="igny8-step-tip">
<strong>💡 Tip:</strong> Review AI-generated content before publishing to ensure quality
</div>
</div>
</div>
</div>
</div>
<!-- Planner Module Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Planner Module</h3>
<p class="igny8-card-subtitle">Research keywords, create clusters, and generate content ideas</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-search igny8-dashboard-icon-lg igny8-dashboard-icon-purple"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Keywords Management</h4>
<p>Research and organize keywords by search volume, difficulty, and intent. Import keywords from various sources or add them manually.</p>
<ul>
<li><strong>Import Keywords:</strong> Upload CSV files or paste keyword lists</li>
<li><strong>Set Metrics:</strong> Add search volume, difficulty, and CPC data</li>
<li><strong>Intent Classification:</strong> Categorize keywords by user intent</li>
<li><strong>Status Tracking:</strong> Monitor keyword mapping and usage</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Content Clusters</h4>
<p>Group related keywords into content topics for better content planning and SEO strategy.</p>
<ul>
<li><strong>AI Clustering:</strong> Automatically group related keywords</li>
<li><strong>Manual Organization:</strong> Create custom clusters for specific topics</li>
<li><strong>Cluster Metrics:</strong> Track keyword count, volume, and difficulty</li>
<li><strong>Content Mapping:</strong> Link clusters to published content</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Content Ideas</h4>
<p>Generate AI-powered content ideas based on your keyword clusters and research.</p>
<ul>
<li><strong>AI Generation:</strong> Create content ideas using artificial intelligence</li>
<li><strong>Keyword Integration:</strong> Ideas include target keywords and topics</li>
<li><strong>Content Types:</strong> Generate ideas for blog posts, guides, and more</li>
<li><strong>Idea Management:</strong> Organize and prioritize content ideas</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Writer Module Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Writer Module</h3>
<p class="igny8-card-subtitle">Create, manage, and publish content with AI assistance</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-edit igny8-dashboard-icon-lg igny8-dashboard-icon-orange"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Content Tasks</h4>
<p>Create and manage content writing tasks with detailed specifications and deadlines.</p>
<ul>
<li><strong>Task Creation:</strong> Convert ideas into actionable content tasks</li>
<li><strong>Priority Setting:</strong> Organize tasks by importance and urgency</li>
<li><strong>Deadline Management:</strong> Set and track content deadlines</li>
<li><strong>Progress Tracking:</strong> Monitor task completion status</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>AI Content Generation</h4>
<p>Generate high-quality content using AI based on your research and specifications.</p>
<ul>
<li><strong>Blog Posts:</strong> Create complete blog post content</li>
<li><strong>Landing Pages:</strong> Generate optimized landing page copy</li>
<li><strong>Product Descriptions:</strong> Write compelling product content</li>
<li><strong>SEO Meta:</strong> Generate titles, descriptions, and meta tags</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Content Workflow</h4>
<p>Track content from idea to publication with automated workflows and status updates.</p>
<ul>
<li><strong>Draft Management:</strong> Create and manage content drafts</li>
<li><strong>Review Process:</strong> Track content review and approval</li>
<li><strong>Publishing:</strong> Publish content directly to your WordPress site</li>
<li><strong>Status Updates:</strong> Automatic status updates throughout the workflow</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Analytics Module Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Analytics Module</h3>
<p class="igny8-card-subtitle">Track performance and monitor your SEO progress</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-chart-line igny8-dashboard-icon-lg igny8-dashboard-icon-blue"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Performance Metrics</h4>
<p>Monitor key SEO metrics and track your content performance over time.</p>
<ul>
<li><strong>Keyword Rankings:</strong> Track keyword position changes</li>
<li><strong>Content Performance:</strong> Monitor page views and engagement</li>
<li><strong>SEO Scores:</strong> Track overall SEO improvement</li>
<li><strong>Traffic Analysis:</strong> Monitor organic traffic growth</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Content Analytics</h4>
<p>Analyze your content performance and identify optimization opportunities.</p>
<ul>
<li><strong>Top Performing Content:</strong> Identify your best-performing pages</li>
<li><strong>Content Gaps:</strong> Find opportunities for new content</li>
<li><strong>Keyword Performance:</strong> Track which keywords drive traffic</li>
<li><strong>Conversion Tracking:</strong> Monitor content conversion rates</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Schedules Module Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Schedules Module</h3>
<p class="igny8-card-subtitle">Automate your SEO tasks with intelligent scheduling</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-clock igny8-dashboard-icon-lg igny8-dashboard-icon-green"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-module-overview">
<div class="igny8-module-section">
<h4>Automated Tasks</h4>
<p>Set up automated tasks to run keyword research, content generation, and optimization tasks.</p>
<ul>
<li><strong>Keyword Research:</strong> Automatically discover new keywords</li>
<li><strong>Content Generation:</strong> Schedule AI content creation</li>
<li><strong>SEO Audits:</strong> Regular automated SEO analysis</li>
<li><strong>Performance Reports:</strong> Scheduled performance reports</li>
</ul>
</div>
<div class="igny8-module-section">
<h4>Workflow Automation</h4>
<p>Create automated workflows that trigger based on specific conditions and schedules.</p>
<ul>
<li><strong>Trigger Conditions:</strong> Set up conditions for task execution</li>
<li><strong>Schedule Management:</strong> Configure when tasks should run</li>
<li><strong>Notification System:</strong> Get alerts when tasks complete</li>
<li><strong>Error Handling:</strong> Automatic retry and error management</li>
</ul>
</div>
</div>
</div>
</div>
<!-- AI Features Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>AI-Powered Features</h3>
<p class="igny8-card-subtitle">Leverage artificial intelligence for smarter SEO</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-robot igny8-dashboard-icon-lg igny8-dashboard-icon-purple"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-ai-features">
<div class="igny8-ai-feature">
<h4>Intelligent Keyword Analysis</h4>
<p>AI analyzes your keywords to determine search intent, difficulty, and optimization opportunities.</p>
<ul>
<li>Automatic intent classification (informational, commercial, navigational)</li>
<li>AI-powered difficulty scoring</li>
<li>Keyword clustering and grouping</li>
<li>Competition analysis and insights</li>
</ul>
</div>
<div class="igny8-ai-feature">
<h4>Smart Content Generation</h4>
<p>Generate high-quality, SEO-optimized content using advanced AI models.</p>
<ul>
<li>Context-aware content creation</li>
<li>SEO optimization built-in</li>
<li>Multiple content formats (blog posts, landing pages, product descriptions)</li>
<li>Automatic keyword integration</li>
</ul>
</div>
<div class="igny8-ai-feature">
<h4>Automated Content Optimization</h4>
<p>AI continuously optimizes your content for better search engine performance.</p>
<ul>
<li>Automatic SEO scoring and suggestions</li>
<li>Content improvement recommendations</li>
<li>Keyword density optimization</li>
<li>Readability enhancement</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Best Practices Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Best Practices</h3>
<p class="igny8-card-subtitle">Get the most out of your AI-powered SEO workflow</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-star-filled igny8-dashboard-icon-lg igny8-dashboard-icon-yellow"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-best-practices">
<div class="igny8-practice-category">
<h4>Content Strategy</h4>
<ul>
<li><strong>Plan Before You Write:</strong> Use the Planner module to research keywords and create clusters before writing</li>
<li><strong>Quality Over Quantity:</strong> Focus on creating high-quality, comprehensive content rather than many short posts</li>
<li><strong>Regular Content Updates:</strong> Keep your content fresh and updated to maintain search rankings</li>
<li><strong>User Intent Focus:</strong> Always consider what users are looking for when creating content</li>
</ul>
</div>
<div class="igny8-practice-category">
<h4>AI Usage</h4>
<ul>
<li><strong>Review AI Content:</strong> Always review and edit AI-generated content before publishing</li>
<li><strong>Use AI as a Starting Point:</strong> Let AI generate ideas and drafts, then add your unique perspective</li>
<li><strong>Monitor API Usage:</strong> Keep track of your OpenAI API usage to manage costs</li>
<li><strong>Test Different Prompts:</strong> Experiment with different AI prompts to get better results</li>
</ul>
</div>
<div class="igny8-practice-category">
<h4>SEO Optimization</h4>
<ul>
<li><strong>Keyword Research First:</strong> Always start with thorough keyword research</li>
<li><strong>Monitor Performance:</strong> Regularly check your analytics to see what's working</li>
<li><strong>Optimize for Users:</strong> Write for humans first, search engines second</li>
<li><strong>Build Authority:</strong> Focus on creating content that establishes your expertise</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Troubleshooting Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Troubleshooting</h3>
<p class="igny8-card-subtitle">Common issues and solutions</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-sos igny8-dashboard-icon-lg igny8-dashboard-icon-red"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-troubleshooting">
<div class="igny8-issue-category">
<h4>AI Integration Issues</h4>
<div class="igny8-issue">
<strong>Problem:</strong> AI features not working
<br><strong>Solution:</strong> Check your OpenAI API key in Settings > AI Integration. Ensure you have sufficient API credits and a stable internet connection.
</div>
<div class="igny8-issue">
<strong>Problem:</strong> Slow AI responses
<br><strong>Solution:</strong> Try switching to a faster model like GPT-3.5-turbo or check your internet connection speed.
</div>
</div>
<div class="igny8-issue-category">
<h4>Performance Issues</h4>
<div class="igny8-issue">
<strong>Problem:</strong> Slow page loading
<br><strong>Solution:</strong> Reduce the number of records per page in table settings, clear your browser cache, or check for plugin conflicts.
</div>
<div class="igny8-issue">
<strong>Problem:</strong> Missing data
<br><strong>Solution:</strong> Check that database tables are created correctly by visiting Settings > Status and running a system check.
</div>
</div>
<div class="igny8-issue-category">
<h4>Content Issues</h4>
<div class="igny8-issue">
<strong>Problem:</strong> AI content quality issues
<br><strong>Solution:</strong> Try different prompts, provide more specific instructions, or use the content as a starting point for manual editing.
</div>
<div class="igny8-issue">
<strong>Problem:</strong> Keywords not being used properly
<br><strong>Solution:</strong> Ensure keywords are properly imported and mapped to clusters before generating content.
</div>
</div>
</div>
</div>
</div>
<!-- Support Section -->
<div class="igny8-standard-header">
<div class="igny8-card-header-content">
<div class="igny8-card-title-text">
<h3>Support & Resources</h3>
<p class="igny8-card-subtitle">Get help when you need it</p>
</div>
<div class="igny8-card-icon">
<span class="dashicons dashicons-info igny8-dashboard-icon-lg igny8-dashboard-icon-blue"></span>
</div>
</div>
</div>
<div class="igny8-card">
<div class="igny8-card-body">
<div class="igny8-support-resources">
<div class="igny8-support-item">
<h4>System Status</h4>
<p>Check your system health and configuration at <strong>Settings > Status</strong>. This page shows database status, AI integration, and system performance.</p>
</div>
<div class="igny8-support-item">
<h4>Debug Information</h4>
<p>Use the built-in debug tools to monitor real-time system status and identify any issues with your setup.</p>
</div>
<div class="igny8-support-item">
<h4>Regular Backups</h4>
<p>Always backup your WordPress site before making major changes or updates to ensure you can restore if needed.</p>
</div>
<div class="igny8-support-item">
<h4>API Monitoring</h4>
<p>Keep track of your OpenAI API usage to manage costs and ensure you don't exceed your limits.</p>
</div>
</div>
</div>
</div>
</div>
<?php
break;
}
?>
<style>
.igny8-help-page {
max-width: 1200px;
margin: 0 auto;
}
.igny8-standard-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px;
border-radius: 8px;
margin-bottom: 20px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.igny8-card-header-content {
display: flex;
align-items: center;
justify-content: space-between;
}
.igny8-card-title-text h3 {
margin: 0 0 8px 0;
font-size: 24px;
font-weight: 600;
}
.igny8-card-subtitle {
margin: 0;
font-size: 16px;
opacity: 0.9;
}
.igny8-dashboard-icon-lg {
font-size: 32px;
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
}
.igny8-dashboard-icon-blue { color: #3b82f6; }
.igny8-dashboard-icon-green { color: #10b981; }
.igny8-dashboard-icon-purple { color: #8b5cf6; }
.igny8-dashboard-icon-orange { color: #f59e0b; }
.igny8-dashboard-icon-yellow { color: #eab308; }
.igny8-dashboard-icon-red { color: #ef4444; }
.igny8-feature-highlights {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
margin-top: 20px;
}
.igny8-feature-item {
display: flex;
align-items: center;
gap: 12px;
padding: 15px;
background: #f8fafc;
border-radius: 6px;
border-left: 4px solid #3b82f6;
}
.igny8-step-header {
display: flex;
align-items: center;
gap: 15px;
margin-bottom: 15px;
}
.igny8-step-header .igny8-step-number {
background: #3b82f6;
color: white;
width: 35px;
height: 35px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-weight: bold;
font-size: 16px;
flex-shrink: 0;
}
.igny8-step-header h4 {
margin: 0;
color: #1f2937;
font-size: 18px;
}
.igny8-step-tip {
background: #fef3c7;
border: 1px solid #f59e0b;
border-radius: 6px;
padding: 12px;
margin-top: 12px;
}
.igny8-module-overview {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
}
.igny8-module-section {
background: #f8fafc;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #3b82f6;
}
.igny8-module-section h4 {
margin: 0 0 12px 0;
color: #1f2937;
font-size: 18px;
}
.igny8-module-section p {
margin: 0 0 15px 0;
color: #6b7280;
line-height: 1.6;
}
.igny8-module-section ul {
margin: 0;
padding-left: 20px;
}
.igny8-module-section li {
margin-bottom: 8px;
color: #374151;
line-height: 1.5;
}
.igny8-ai-features {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 30px;
}
.igny8-ai-feature {
background: #f8fafc;
padding: 25px;
border-radius: 8px;
border-left: 4px solid #8b5cf6;
}
.igny8-ai-feature h4 {
margin: 0 0 12px 0;
color: #1f2937;
font-size: 18px;
}
.igny8-ai-feature p {
margin: 0 0 15px 0;
color: #6b7280;
line-height: 1.6;
}
.igny8-best-practices {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
}
.igny8-practice-category {
background: #f8fafc;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #10b981;
}
.igny8-practice-category h4 {
margin: 0 0 15px 0;
color: #1f2937;
font-size: 18px;
}
.igny8-troubleshooting {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 30px;
}
.igny8-issue-category {
background: #f8fafc;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #ef4444;
}
.igny8-issue-category h4 {
margin: 0 0 15px 0;
color: #1f2937;
font-size: 18px;
}
.igny8-issue {
background: white;
padding: 15px;
border-radius: 6px;
margin-bottom: 15px;
border-left: 3px solid #f59e0b;
}
.igny8-support-resources {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
.igny8-support-item {
background: #f8fafc;
padding: 20px;
border-radius: 8px;
border-left: 4px solid #3b82f6;
}
.igny8-support-item h4 {
margin: 0 0 10px 0;
color: #1f2937;
font-size: 16px;
}
.igny8-support-item p {
margin: 0;
color: #6b7280;
line-height: 1.6;
}
@media (max-width: 768px) {
.igny8-card-header-content {
flex-direction: column;
text-align: center;
gap: 15px;
}
.igny8-step-header {
flex-direction: column;
text-align: center;
gap: 10px;
}
.igny8-module-overview,
.igny8-ai-features,
.igny8-best-practices,
.igny8-troubleshooting {
grid-template-columns: 1fr;
}
}
</style>
<?php
// Capture page content
$igny8_page_content = ob_get_clean();
// Include global layout
include plugin_dir_path(__FILE__) . '../../core/global-layout.php';
?>

View File

@@ -0,0 +1,329 @@
<?php
/**
* ==========================
* 🔐 IGNY8 FILE RULE HEADER
* ==========================
* @file : system-testing.php
* @location : /modules/help/system-testing.php
* @type : Admin Page
* @scope : Module Only
* @allowed : System testing, functionality verification, debugging tools
* @reusability : Single Use
* @notes : System testing interface for help module
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Dev-only access guard
if (!defined('IGNY8_DEV') || IGNY8_DEV !== true) {
return;
}
?>
<div class="notice notice-info">
<p><strong>Testing Interface:</strong> Basic functionality verification for taxonomy, schema, and UI components.</p>
</div>
<div class="igny8-test-container" style="display: flex; gap: 20px; margin-top: 20px;">
<!-- Schema Tests -->
<div class="igny8-test-section" style="flex: 1; border: 1px solid #ddd; padding: 20px; border-radius: 5px;">
<h2>Database Schema Tests</h2>
<div class="test-buttons">
<button class="button button-primary" onclick="testDatabaseConnection()">Test DB Connection</button>
<button class="button" onclick="testTableExists()">Check Tables</button>
<button class="button" onclick="testSchemaIntegrity()">Schema Integrity</button>
</div>
<div id="schema-results" class="test-results" style="margin-top: 15px; padding: 10px; background: #f9f9f9; border-radius: 3px; min-height: 100px;">
<p><em>Click a test button to see results...</em></p>
</div>
</div>
<!-- Taxonomy Tests -->
<div class="igny8-test-section" style="flex: 1; border: 1px solid #ddd; padding: 20px; border-radius: 5px;">
<h2>Taxonomy Tests</h2>
<div class="test-buttons">
<button class="button button-primary" onclick="testTaxonomyRegistration()">Test Taxonomy</button>
<button class="button" onclick="testCreateTerm()">Create Test Term</button>
<button class="button" onclick="testTermQueries()">Query Terms</button>
</div>
<div id="taxonomy-results" class="test-results" style="margin-top: 15px; padding: 10px; background: #f9f9f9; border-radius: 3px; min-height: 100px;">
<p><em>Click a test button to see results...</em></p>
</div>
</div>
<!-- AJAX Tests -->
<div class="igny8-test-section" style="flex: 1; border: 1px solid #ddd; padding: 20px; border-radius: 5px;">
<h2>AJAX & API Tests</h2>
<div class="test-buttons">
<button class="button button-primary" onclick="testAjaxConnection()">Test AJAX</button>
<button class="button" onclick="testTableData()">Load Table Data</button>
<button class="button" onclick="testWorkflowTriggers()">Test Workflows</button>
</div>
<div id="ajax-results" class="test-results" style="margin-top: 15px; padding: 10px; background: #f9f9f9; border-radius: 3px; min-height: 100px;">
<p><em>Click a test button to see results...</em></p>
</div>
</div>
</div>
<!-- Quick Record Test -->
<div style="margin-top: 30px; border: 1px solid #ddd; padding: 20px; border-radius: 5px;">
<h2>Quick Record Test</h2>
<p>Test basic record operations:</p>
<div style="display: flex; gap: 10px; align-items: center; margin-top: 10px;">
<input type="text" id="test-record-name" placeholder="Test record name" value="Test Record <?php echo date('Y-m-d H:i:s'); ?>" style="flex: 1;">
<button class="button button-primary" onclick="createTestRecord()">Create Test Record</button>
<button class="button" onclick="listTestRecords()">List Records</button>
<button class="button" onclick="clearTestRecords()" style="color: #d63638;">Clear All</button>
</div>
<div id="record-results" class="test-results" style="margin-top: 15px; padding: 10px; background: #f9f9f9; border-radius: 3px; min-height: 50px;">
<p><em>Create or list records to see results...</em></p>
</div>
</div>
<script>
// Test functions
function testDatabaseConnection() {
updateResults('schema-results', 'Testing database connection...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_db_connection&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('schema-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('schema-results', 'Error: ' + error.message, 'error');
});
}
function testTableExists() {
updateResults('schema-results', 'Checking table existence...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_table_exists&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('schema-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('schema-results', 'Error: ' + error.message, 'error');
});
}
function testSchemaIntegrity() {
updateResults('schema-results', 'Testing schema integrity...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_schema_integrity&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('schema-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('schema-results', 'Error: ' + error.message, 'error');
});
}
function testTaxonomyRegistration() {
updateResults('taxonomy-results', 'Testing taxonomy registration...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_taxonomy&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('taxonomy-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('taxonomy-results', 'Error: ' + error.message, 'error');
});
}
function testCreateTerm() {
updateResults('taxonomy-results', 'Creating test term...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_create_term&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('taxonomy-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('taxonomy-results', 'Error: ' + error.message, 'error');
});
}
function testTermQueries() {
updateResults('taxonomy-results', 'Querying terms...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_term_queries&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('taxonomy-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('taxonomy-results', 'Error: ' + error.message, 'error');
});
}
function testAjaxConnection() {
updateResults('ajax-results', 'Testing AJAX connection...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_ajax&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('ajax-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('ajax-results', 'Error: ' + error.message, 'error');
});
}
function testTableData() {
updateResults('ajax-results', 'Testing table data loading...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_get_table_data&nonce=' + igny8_ajax.nonce + '&table=planner_keywords&page=1&per_page=5'
})
.then(response => response.json())
.then(data => {
updateResults('ajax-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('ajax-results', 'Error: ' + error.message, 'error');
});
}
function testWorkflowTriggers() {
updateResults('ajax-results', 'Testing workflow triggers...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_workflows&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('ajax-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('ajax-results', 'Error: ' + error.message, 'error');
});
}
function createTestRecord() {
const name = document.getElementById('test-record-name').value;
if (!name.trim()) {
updateResults('record-results', 'Please enter a record name', 'error');
return;
}
updateResults('record-results', 'Creating test record...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_create_record&nonce=' + igny8_ajax.nonce + '&name=' + encodeURIComponent(name)
})
.then(response => response.json())
.then(data => {
updateResults('record-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('record-results', 'Error: ' + error.message, 'error');
});
}
function listTestRecords() {
updateResults('record-results', 'Listing test records...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_list_records&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('record-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('record-results', 'Error: ' + error.message, 'error');
});
}
function clearTestRecords() {
if (!confirm('Are you sure you want to clear all test records?')) return;
updateResults('record-results', 'Clearing test records...', 'info');
fetch(ajaxurl, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'action=igny8_test_clear_records&nonce=' + igny8_ajax.nonce
})
.then(response => response.json())
.then(data => {
updateResults('record-results', JSON.stringify(data, null, 2), data.success ? 'success' : 'error');
})
.catch(error => {
updateResults('record-results', 'Error: ' + error.message, 'error');
});
}
function updateResults(elementId, content, type) {
const element = document.getElementById(elementId);
const timestamp = new Date().toLocaleTimeString();
const prefix = type === 'success' ? '✅' : type === 'error' ? '❌' : '';
element.innerHTML = `<div style="margin-bottom: 10px;"><strong>${prefix} [${timestamp}]</strong></div><pre style="white-space: pre-wrap; font-size: 12px;">${content}</pre>`;
if (type === 'success') {
element.style.borderLeft = '4px solid #00a32a';
} else if (type === 'error') {
element.style.borderLeft = '4px solid #d63638';
} else {
element.style.borderLeft = '4px solid #0073aa';
}
}
</script>
<?php
// Note: This file is included by help.php, so no need to capture content or include layout
// The content will be captured by the parent help.php file
?>