W

Automatic Plugin for WordPress

Technical Documentation

โ† Back to Main

๐Ÿ”ง System Overview

Automatic Plugin for WordPress is an enterprise-grade content automation system built with a modular triple-engine architecture. The plugin leverages advanced AI integration, sophisticated caching mechanisms, and robust deduplication algorithms to deliver scalable content generation across multiple languages and sources.

๐Ÿ”„ RSS Engine

Processes multiple RSS feeds with intelligent filtering, AI enhancement, and real-time content optimization.

๐Ÿค– AI Engine

OpenAI GPT-4.1 integration with custom prompts, smart caching, and multilingual content generation.

๐ŸŒ Web Scraping

Advanced content extraction with anti-detection, dynamic parsing, and content transformation.

โš™๏ธ System Requirements

WordPress Environment

  • โ€ข WordPress: Version 5.0 or higher
  • โ€ข PHP: Version 7.4 or higher (8.0+ recommended)
  • โ€ข MySQL: Version 5.6 or higher
  • โ€ข Memory Limit: 256MB minimum (512MB recommended)
  • โ€ข Max Execution Time: 300 seconds minimum
  • โ€ข cURL: Enabled for API calls

Server Configuration

  • โ€ข SSL: Required for API communications
  • โ€ข WP-Cron: Enabled for automation
  • โ€ข File Permissions: 755 for directories, 644 for files
  • โ€ข Upload Directory: Writable for image processing
  • โ€ข GD Library: Required for image optimization
  • โ€ข JSON Extension: Required for API responses

๐Ÿ“ฆ Installation Guide

Method 1: WordPress Admin Upload

  1. Download the plugin ZIP file
  2. Navigate to Plugins โ†’ Add New โ†’ Upload Plugin
  3. Select the ZIP file and click "Install Now"
  4. Activate the plugin after installation

Method 2: FTP Installation

  1. Extract the plugin ZIP file
  2. Upload the plugin folder to /wp-content/plugins/
  3. Set proper file permissions (755 for directories, 644 for files)
  4. Activate via WordPress admin panel

Post-Installation Verification

// Check plugin activation status if (is_plugin_active('auto-news-importer-ultimate/main.php')) { echo "Plugin activated successfully"; } // Verify database tables global $wpdb; $tables = $wpdb->get_results("SHOW TABLES LIKE '{$wpdb->prefix}ani_%'"); if (count($tables) >= 3) { echo "Database tables created successfully"; }

๐Ÿ”ง Advanced Configuration

Core Configuration Constants

// wp-config.php additions for optimal performance define('ANI_MAX_EXECUTION_TIME', 600); define('ANI_MEMORY_LIMIT', '512M'); define('ANI_CACHE_DURATION', 86400); // 24 hours define('ANI_MAX_CONCURRENT_REQUESTS', 5); define('ANI_DEBUG_MODE', false); define('ANI_LOG_LEVEL', 'info'); // debug, info, warning, error // OpenAI Configuration define('ANI_OPENAI_MAX_TOKENS', 2048); define('ANI_OPENAI_TEMPERATURE', 0.7); define('ANI_OPENAI_TIMEOUT', 60);

Database Configuration

// Custom database settings define('ANI_DB_CHARSET', 'utf8mb4'); define('ANI_DB_COLLATE', 'utf8mb4_unicode_ci'); define('ANI_MAX_DB_CONNECTIONS', 10); define('ANI_DB_TIMEOUT', 30); // Table optimization settings define('ANI_AUTO_OPTIMIZE_TABLES', true); define('ANI_CLEANUP_OLD_LOGS', 30); // days

Cron Configuration

// Disable WordPress cron and use system cron for better performance define('DISABLE_WP_CRON', true); // System crontab entries # RSS processing every 5 minutes */5 * * * * /usr/bin/wget -q -O - "https://yoursite.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1 # Original content generation every hour 0 * * * * /usr/bin/wget -q -O - "https://yoursite.com/?ani_cron=original" >/dev/null 2>&1 # Web scraping every 30 minutes */30 * * * * /usr/bin/wget -q -O - "https://yoursite.com/?ani_cron=scraping" >/dev/null 2>&1

๐Ÿ—๏ธ Engine Architecture

Engine Flow Diagram

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ RSS Engine โ”‚ โ”‚ AI Engine โ”‚ โ”‚ Scraping Engine โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Feed Parser โ”‚ โ”‚ โ€ข OpenAI API โ”‚ โ”‚ โ€ข URL Processor โ”‚ โ”‚ โ€ข Content Filterโ”‚ โ”‚ โ€ข Prompt Managerโ”‚ โ”‚ โ€ข Content Extractโ”‚ โ”‚ โ€ข Deduplication โ”‚ โ”‚ โ€ข Cache System โ”‚ โ”‚ โ€ข Anti-Detectionโ”‚ โ”‚ โ€ข Image Sourcingโ”‚ โ”‚ โ€ข Multi-Languageโ”‚ โ”‚ โ€ข Rate Limiting โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Content Processor โ”‚ โ”‚ โ”‚ โ”‚ โ€ข Quality Validation โ”‚ โ”‚ โ€ข SEO Optimization โ”‚ โ”‚ โ€ข Image Processing โ”‚ โ”‚ โ€ข WordPress Integration โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Published Content โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Class Structure

// Main Plugin Class class AutoNewsImporter { private $rss_engine; private $ai_engine; private $scraping_engine; private $content_processor; private $cache_manager; public function __construct() { $this->init_engines(); $this->register_hooks(); } private function init_engines() { $this->rss_engine = new ANI_RSS_Engine(); $this->ai_engine = new ANI_AI_Engine(); $this->scraping_engine = new ANI_Scraping_Engine(); $this->content_processor = new ANI_Content_Processor(); $this->cache_manager = new ANI_Cache_Manager(); } } // Engine Interfaces interface ANI_Engine_Interface { public function process(); public function validate_content($content); public function get_stats(); }

๐Ÿ—„๏ธ Database Schema

Core Tables

-- Main content tracking table CREATE TABLE `wp_ani_content` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `source_url` varchar(500) NOT NULL, `content_hash` varchar(64) NOT NULL, `title` text NOT NULL, `content` longtext NOT NULL, `post_id` bigint(20) unsigned DEFAULT NULL, `engine_type` enum('rss','ai','scraping') NOT NULL, `status` enum('pending','processing','published','failed') DEFAULT 'pending', `language` varchar(10) DEFAULT 'en', `category_id` bigint(20) unsigned DEFAULT NULL, `image_url` varchar(500) DEFAULT NULL, `meta_data` longtext DEFAULT NULL, `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `content_hash` (`content_hash`), KEY `engine_type` (`engine_type`), KEY `status` (`status`), KEY `created_at` (`created_at`) ); -- RSS feeds configuration CREATE TABLE `wp_ani_rss_feeds` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `feed_url` varchar(500) NOT NULL, `feed_name` varchar(255) NOT NULL, `category_id` bigint(20) unsigned DEFAULT NULL, `language` varchar(10) DEFAULT 'en', `active` tinyint(1) DEFAULT 1, `last_check` timestamp NULL DEFAULT NULL, `check_interval` int(11) DEFAULT 300, `total_processed` bigint(20) DEFAULT 0, `settings` longtext DEFAULT NULL, `created_at` timestamp DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `feed_url` (`feed_url`) ); -- Processing statistics CREATE TABLE `wp_ani_stats` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `date` date NOT NULL, `engine_type` enum('rss','ai','scraping') NOT NULL, `total_processed` int(11) DEFAULT 0, `successful` int(11) DEFAULT 0, `failed` int(11) DEFAULT 0, `processing_time` float DEFAULT 0, `memory_usage` bigint(20) DEFAULT 0, `api_calls` int(11) DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `date_engine` (`date`,`engine_type`) );

Indexing Strategy

  • โ€ข Primary keys on all tables for fast lookups
  • โ€ข Composite indexes on frequently queried columns
  • โ€ข Content hash for O(1) duplicate detection
  • โ€ข Timestamp indexes for date-range queries

Data Optimization

  • โ€ข JSON storage for flexible metadata
  • โ€ข LONGTEXT for content with compression
  • โ€ข Automatic cleanup of old records
  • โ€ข Partitioning by date for large datasets

๐Ÿ”— WordPress Hooks

Action Hooks

// =============================== // CONTENT PROCESSING LIFECYCLE // =============================== // Pre-processing hooks do_action('ani_before_content_processing', $content, $engine_type); do_action('ani_content_received', $raw_content, $source_url, $engine_type); do_action('ani_content_validated', $content, $validation_result); do_action('ani_content_sanitized', $sanitized_content, $original_content); // Processing hooks do_action('ani_content_processing_started', $content_id, $engine_type); do_action('ani_content_ai_enhanced', $enhanced_content, $original_content, $ai_model); do_action('ani_content_translated', $translated_content, $source_language, $target_language); do_action('ani_content_seo_optimized', $optimized_content, $seo_data); // Post-processing hooks do_action('ani_after_content_processing', $post_id, $content, $engine_type); do_action('ani_content_published', $post_id, $source_data); do_action('ani_content_scheduled', $post_id, $schedule_time); do_action('ani_content_failed', $error, $content_data); do_action('ani_content_skipped', $reason, $content_data); // =============================== // ENGINE-SPECIFIC HOOKS // =============================== // RSS Engine hooks do_action('ani_rss_feed_fetched', $feed_url, $feed_data); do_action('ani_rss_feed_parsed', $feed_id, $items, $feed_url); do_action('ani_rss_item_processed', $item_data, $feed_id); do_action('ani_rss_feed_processed', $feed_id, $items_count); do_action('ani_rss_feed_failed', $feed_id, $error_message); do_action('ani_rss_duplicate_detected', $item_hash, $existing_post_id); // AI Engine hooks do_action('ani_ai_prompt_prepared', $prompt, $content_type, $language); do_action('ani_ai_request_sent', $prompt, $api_endpoint, $parameters); do_action('ani_ai_response_received', $response, $prompt, $execution_time); do_action('ani_ai_content_generated', $content, $prompt_data); do_action('ani_ai_content_enhanced', $enhanced_content, $original_content); do_action('ani_ai_translation_completed', $translated_text, $source_lang, $target_lang); do_action('ani_ai_api_limit_reached', $api_name, $limit_info); do_action('ani_ai_api_error', $error_code, $error_message, $api_endpoint); // Web Scraping Engine hooks do_action('ani_scraping_started', $url, $scraping_config); do_action('ani_scraping_page_fetched', $url, $html_content, $response_code); do_action('ani_scraping_content_extracted', $extracted_content, $url); do_action('ani_scraping_completed', $url, $content); do_action('ani_scraping_failed', $url, $error_message); do_action('ani_scraping_blocked', $url, $block_reason); do_action('ani_scraping_rate_limited', $url, $retry_after); // =============================== // IMAGE PROCESSING HOOKS // =============================== // Image sourcing hooks do_action('ani_image_search_started', $search_query, $image_source); do_action('ani_image_found', $image_url, $image_data, $source); do_action('ani_image_downloaded', $image_url, $local_path); do_action('ani_image_optimized', $image_path, $optimization_stats); do_action('ani_image_uploaded', $image_id, $post_id, $image_data); do_action('ani_image_processing_failed', $image_url, $error_message); // =============================== // DEDUPLICATION SYSTEM HOOKS // =============================== do_action('ani_duplicate_check_started', $content_hash, $engine_type); do_action('ani_duplicate_detected', $content_hash, $existing_post_id, $new_content); do_action('ani_duplicate_resolved', $resolution_method, $content_data); do_action('ani_unique_content_confirmed', $content_hash, $content_data); // =============================== // CRON AND SCHEDULING HOOKS // =============================== do_action('ani_cron_job_started', $job_type, $job_config); do_action('ani_cron_job_completed', $job_type, $execution_stats); do_action('ani_cron_job_failed', $job_type, $error_message); do_action('ani_cron_schedule_updated', $job_type, $new_schedule); // =============================== // CACHE SYSTEM HOOKS // =============================== do_action('ani_cache_miss', $cache_key, $cache_group); do_action('ani_cache_hit', $cache_key, $cache_group); do_action('ani_cache_set', $cache_key, $cache_group, $expiration); do_action('ani_cache_cleared', $cache_type); do_action('ani_cache_expired', $cache_key, $cache_group); // =============================== // SYSTEM AND MAINTENANCE HOOKS // =============================== // Plugin lifecycle hooks do_action('ani_plugin_activated'); do_action('ani_plugin_deactivated'); do_action('ani_plugin_updated', $old_version, $new_version); do_action('ani_database_upgraded', $old_version, $new_version); // Configuration hooks do_action('ani_settings_updated', $setting_group, $old_values, $new_values); do_action('ani_api_key_updated', $api_service, $key_status); do_action('ani_feed_added', $feed_id, $feed_data); do_action('ani_feed_removed', $feed_id); do_action('ani_feed_status_changed', $feed_id, $old_status, $new_status); // Performance and monitoring hooks do_action('ani_performance_monitored', $operation, $execution_time, $memory_usage); do_action('ani_memory_limit_reached', $current_usage, $limit); do_action('ani_processing_queue_full', $queue_size, $max_size); do_action('ani_maintenance_completed', $stats); // Error and logging hooks do_action('ani_error_logged', $error_level, $message); do_action('ani_debug_info_collected', $debug_data); do_action('ani_log_rotated', $log_file, $archive_file); // =============================== // MULTILINGUAL HOOKS // =============================== do_action('ani_language_detected', $detected_language, $content); do_action('ani_language_switched', $old_language, $new_language); do_action('ani_translation_started', $content, $source_lang, $target_lang); do_action('ani_translation_completed', $translated_content, $source_lang, $target_lang); // =============================== // QUALITY CONTROL HOOKS // =============================== do_action('ani_quality_check_started', $content_id, $quality_metrics); do_action('ani_quality_check_passed', $content_id, $quality_score); do_action('ani_quality_check_failed', $content_id, $failure_reasons); do_action('ani_content_approved', $content_id, $approval_data); do_action('ani_content_rejected', $content_id, $rejection_reason); // =============================== // SECURITY HOOKS // =============================== do_action('ani_security_scan_completed', $scan_results); do_action('ani_suspicious_activity_detected', $activity_type, $details); do_action('ani_access_denied', $user_id, $attempted_action); do_action('ani_api_key_validated', $api_service, $validation_result);

Filter Hooks

// =============================== // CONTENT PROCESSING FILTERS // =============================== // Content filtering and manipulation $content = apply_filters('ani_filter_content', $content, $source); $title = apply_filters('ani_filter_title', $title, $content); $excerpt = apply_filters('ani_filter_excerpt', $excerpt, $content); $content = apply_filters('ani_sanitize_content', $content, $engine_type); $content = apply_filters('ani_validate_content', $content, $validation_rules); $content_length = apply_filters('ani_max_content_length', 5000, $content_type); $min_content_length = apply_filters('ani_min_content_length', 300, $content_type); // Content enhancement filters $enhanced_content = apply_filters('ani_enhance_content', $content, $enhancement_options); $seo_content = apply_filters('ani_seo_optimize_content', $content, $seo_settings); $formatted_content = apply_filters('ani_format_content', $content, $format_rules); // =============================== // AI PROCESSING FILTERS // =============================== // AI prompts and responses $prompt = apply_filters('ani_ai_prompt', $prompt, $content_type, $language); $system_prompt = apply_filters('ani_ai_system_prompt', $system_prompt, $content_type); $ai_response = apply_filters('ani_ai_response', $response, $prompt); $ai_parameters = apply_filters('ani_ai_parameters', $parameters, $content_type); $ai_model = apply_filters('ani_ai_model_selection', 'GPT-4.1', $content_type); // Translation filters $translation_prompt = apply_filters('ani_translation_prompt', $prompt, $source_lang, $target_lang); $translated_content = apply_filters('ani_translated_content', $content, $source_lang, $target_lang); // =============================== // RSS PROCESSING FILTERS // =============================== // RSS feed processing $feed_url = apply_filters('ani_rss_feed_url', $feed_url, $feed_config); $feed_items = apply_filters('ani_rss_feed_items', $feed_items, $feed_url); $rss_content = apply_filters('ani_rss_content_extract', $content, $rss_item); $rss_title = apply_filters('ani_rss_title_clean', $title, $rss_item); $feed_frequency = apply_filters('ani_rss_check_frequency', 300, $feed_id); // =============================== // SCRAPING FILTERS // =============================== // Web scraping filters $scraping_config = apply_filters('ani_scraping_config', $config, $url); $extracted_content = apply_filters('ani_scraped_content', $content, $url); $scraping_selectors = apply_filters('ani_scraping_selectors', $selectors, $url); $user_agents = apply_filters('ani_scraping_user_agents', $user_agents, $url); $scraping_delay = apply_filters('ani_scraping_delay', 2, $url); // =============================== // IMAGE PROCESSING FILTERS // =============================== // Image sourcing and processing $image_url = apply_filters('ani_filter_image', $image_url, $content); $image_search_query = apply_filters('ani_image_search_query', $query, $content); $image_sources = apply_filters('ani_image_sources', $sources, $content_type); $image_alt_text = apply_filters('ani_image_alt_text', $alt_text, $image_data); $image_caption = apply_filters('ani_image_caption', $caption, $image_data); $image_quality = apply_filters('ani_image_compression_quality', 85, $image_type); // =============================== // POST CREATION FILTERS // =============================== // WordPress post data $post_data = apply_filters('ani_pre_insert_post', $post_data, $source_data); $post_meta = apply_filters('ani_post_meta', $meta_data, $post_id); $post_categories = apply_filters('ani_post_categories', $categories, $content, $engine_type); $post_tags = apply_filters('ani_post_tags', $tags, $content, $engine_type); $post_author = apply_filters('ani_post_author', $author_id, $content_source); $post_status = apply_filters('ani_post_status', 'publish', $content_quality); $post_date = apply_filters('ani_post_date', $post_date, $content_source); // =============================== // CONFIGURATION FILTERS // =============================== // Engine settings $settings = apply_filters('ani_engine_settings', $settings, $engine_type); $rss_settings = apply_filters('ani_rss_engine_settings', $settings); $ai_settings = apply_filters('ani_ai_engine_settings', $settings); $scraping_settings = apply_filters('ani_scraping_engine_settings', $settings); // Cache configuration $cache_duration = apply_filters('ani_cache_duration', 3600, $cache_type); $cache_key = apply_filters('ani_cache_key', $key, $data, $cache_group); $cache_groups = apply_filters('ani_cache_groups', $groups); // =============================== // QUALITY CONTROL FILTERS // =============================== // Content quality filters $quality_threshold = apply_filters('ani_quality_threshold', 75, $content_type); $spam_keywords = apply_filters('ani_spam_keywords', $keywords, $language); $banned_domains = apply_filters('ani_banned_domains', $domains); $allowed_content_types = apply_filters('ani_allowed_content_types', $types); // =============================== // DEDUPLICATION FILTERS // =============================== // Duplicate detection $duplicate_threshold = apply_filters('ani_duplicate_threshold', 0.8, $content_type); $hash_algorithm = apply_filters('ani_hash_algorithm', 'sha256', $content_type); $similarity_check = apply_filters('ani_similarity_check_enabled', true, $engine_type); // =============================== // MULTILINGUAL FILTERS // =============================== // Language processing $detected_language = apply_filters('ani_detected_language', $language, $content); $target_languages = apply_filters('ani_target_languages', $languages, $content_type); $language_prompts = apply_filters('ani_language_specific_prompts', $prompts, $language); // =============================== // API AND EXTERNAL SERVICE FILTERS // =============================== // API configuration $api_endpoints = apply_filters('ani_api_endpoints', $endpoints, $service); $api_headers = apply_filters('ani_api_headers', $headers, $service, $endpoint); $api_timeout = apply_filters('ani_api_timeout', 30, $service); $api_retry_attempts = apply_filters('ani_api_retry_attempts', 3, $service); // Rate limiting $rate_limits = apply_filters('ani_rate_limits', $limits, $service); $rate_limit_window = apply_filters('ani_rate_limit_window', 3600, $service); // =============================== // SCHEDULING AND CRON FILTERS // =============================== // Cron configuration $cron_schedules = apply_filters('ani_cron_schedules', $schedules); $cron_frequency = apply_filters('ani_cron_frequency', $frequency, $job_type); $max_execution_time = apply_filters('ani_max_execution_time', 300, $operation); // =============================== // PERFORMANCE FILTERS // =============================== // Performance tuning $memory_limit = apply_filters('ani_memory_limit', '512M', $operation); $batch_size = apply_filters('ani_batch_size', 10, $operation); $concurrent_processes = apply_filters('ani_concurrent_processes', 3, $engine_type); // =============================== // SECURITY FILTERS // =============================== // Security configuration $allowed_domains = apply_filters('ani_allowed_domains', $domains, $context); $security_headers = apply_filters('ani_security_headers', $headers, $request_type); $input_validation_rules = apply_filters('ani_validation_rules', $rules, $input_type); // =============================== // DEBUGGING AND LOGGING FILTERS // =============================== // Debug configuration $debug_level = apply_filters('ani_debug_level', 'info', $context); $log_retention_days = apply_filters('ani_log_retention_days', 30); $debug_data = apply_filters('ani_debug_data', $data, $operation);

Custom Hook Examples

// Example: Custom content validation add_filter('ani_filter_content', function($content, $source) { // Add custom spam detection if (contains_spam_keywords($content)) { return false; // Reject content } // Add custom formatting $content = add_custom_formatting($content); return $content; }, 10, 2); // Example: Custom AI prompt modification add_filter('ani_ai_prompt', function($prompt, $type, $language) { if ($language === 'ro') { $prompt .= " Scrie รฎn stil jurnalistic romรขnesc."; } return $prompt; }, 10, 3);

๐Ÿ›ก๏ธ Security Features

Input Validation

// Sanitization functions function ani_sanitize_url($url) { $url = esc_url_raw($url); if (!filter_var($url, FILTER_VALIDATE_URL)) { return false; } return $url; } function ani_sanitize_content($content) { // Remove potentially dangerous content $content = wp_kses_post($content); // Additional sanitization $content = sanitize_textarea_field($content); return $content; } // CSRF Protection if (!wp_verify_nonce($_POST['ani_nonce'], 'ani_action')) { wp_die('Security check failed'); }

Access Control

// Capability checking function ani_check_permissions($action) { if (!current_user_can('manage_options')) { wp_die('Insufficient permissions'); } // Additional role-based checks $required_caps = array( 'configure' => 'manage_options', 'view_stats' => 'edit_posts', 'manage_feeds' => 'publish_posts' ); if (!current_user_can($required_caps[$action])) { return false; } return true; }

Security Measures

  • โ€ข All user inputs sanitized and validated
  • โ€ข CSRF tokens on all forms and AJAX requests
  • โ€ข SQL injection prevention with prepared statements
  • โ€ข XSS protection with proper output escaping
  • โ€ข API key encryption in database
  • โ€ข Rate limiting for API calls
  • โ€ข Content filtering for malicious code
  • โ€ข Secure file upload handling
  • โ€ข WordPress capability system integration
  • โ€ข Regular security audit logging

โšก Performance Optimization

Caching Strategy

// Multi-layer caching system class ANI_Cache_Manager { private $memory_cache = array(); private $transient_cache_duration = 3600; public function get($key, $group = 'default') { // Level 1: Memory cache (fastest) if (isset($this->memory_cache[$group][$key])) { return $this->memory_cache[$group][$key]; } // Level 2: WordPress transients $transient_key = "ani_{$group}_{$key}"; $value = get_transient($transient_key); if ($value !== false) { $this->memory_cache[$group][$key] = $value; return $value; } return false; } public function set($key, $value, $group = 'default', $expiration = null) { $expiration = $expiration ?: $this->transient_cache_duration; // Store in memory $this->memory_cache[$group][$key] = $value; // Store in transients $transient_key = "ani_{$group}_{$key}"; set_transient($transient_key, $value, $expiration); } }

Database Optimization

  • โ€ข Indexed queries for fast lookups
  • โ€ข Batch processing for bulk operations
  • โ€ข Connection pooling
  • โ€ข Query result caching
  • โ€ข Automatic table optimization

Memory Management

  • โ€ข Memory usage monitoring
  • โ€ข Automatic garbage collection
  • โ€ข Chunked processing for large datasets
  • โ€ข Memory limit checks
  • โ€ข Resource cleanup after processing

API Optimization

  • โ€ข Request batching
  • โ€ข Response caching
  • โ€ข Rate limit handling
  • โ€ข Connection reuse
  • โ€ข Async processing where possible

Performance Monitoring

// Performance tracking class ANI_Performance_Monitor { private $start_time; private $start_memory; public function start_timer($operation) { $this->start_time = microtime(true); $this->start_memory = memory_get_usage(true); } public function end_timer($operation) { $execution_time = microtime(true) - $this->start_time; $memory_used = memory_get_usage(true) - $this->start_memory; // Log performance data $this->log_performance($operation, $execution_time, $memory_used); return array( 'execution_time' => $execution_time, 'memory_used' => $memory_used ); } }

๐Ÿ› Debugging System

Debug Mode Configuration

// Enable debug mode in wp-config.php define('ANI_DEBUG', true); define('ANI_DEBUG_LOG', true); define('ANI_DEBUG_LEVEL', 'verbose'); // basic, verbose, trace // Or enable via plugin settings add_action('ani_debug_mode_enabled', function() { // Debug mode activated ini_set('log_errors', 1); ini_set('error_log', WP_CONTENT_DIR . '/ani-debug.log'); });

Logging System

// Comprehensive logging class ANI_Logger { const LEVEL_ERROR = 1; const LEVEL_WARNING = 2; const LEVEL_INFO = 3; const LEVEL_DEBUG = 4; public static function log($message, $level = self::LEVEL_INFO, $context = array()) { if (!defined('ANI_DEBUG') || !ANI_DEBUG) { return; } $timestamp = date('Y-m-d H:i:s'); $level_name = self::get_level_name($level); $log_entry = sprintf( "[%s] %s: %s %s\n", $timestamp, $level_name, $message, !empty($context) ? json_encode($context) : '' ); error_log($log_entry, 3, WP_CONTENT_DIR . '/ani-debug.log'); } }

Error Handling

// Exception handling try { $result = $this->process_content($content); } catch (ANI_API_Exception $e) { ANI_Logger::log('API Error: ' . $e->getMessage(), ANI_Logger::LEVEL_ERROR, array( 'api_endpoint' => $e->getEndpoint(), 'response_code' => $e->getCode(), 'content_id' => $content['id'] )); // Retry logic $this->schedule_retry($content, $e); } catch (ANI_Content_Exception $e) { ANI_Logger::log('Content Error: ' . $e->getMessage(), ANI_Logger::LEVEL_WARNING); // Mark content as failed $this->mark_content_failed($content['id'], $e->getMessage()); }

Debug Tools

Built-in Debug Panel
  • โ€ข Real-time processing status
  • โ€ข API call monitoring
  • โ€ข Memory usage tracking
  • โ€ข Error log viewer
  • โ€ข Performance metrics
CLI Commands
# Test specific components wp ani test rss-feed --feed-id=1 wp ani test openai-connection wp ani test scraping --url="example.com" # Debug operations wp ani debug process-queue wp ani debug clear-cache wp ani debug export-logs # Performance analysis wp ani stats performance --days=7 wp ani stats api-usage --detailed

Common Debug Scenarios

// Debug API issues if (ANI_DEBUG) { ANI_Logger::log('API Request', ANI_Logger::LEVEL_DEBUG, array( 'endpoint' => $endpoint, 'payload' => $payload, 'headers' => $headers )); ANI_Logger::log('API Response', ANI_Logger::LEVEL_DEBUG, array( 'status_code' => $response_code, 'response_body' => $response_body, 'execution_time' => $execution_time )); } // Debug content processing if (ANI_DEBUG_LEVEL === 'verbose') { ANI_Logger::log('Content Processing Step', ANI_Logger::LEVEL_DEBUG, array( 'step' => 'content_filtering', 'original_length' => strlen($original_content), 'filtered_length' => strlen($filtered_content), 'filters_applied' => $applied_filters )); }