Panezio License: GPLv2 or later */ if (!defined('ABSPATH')) exit; // Exit if accessed directly if (!class_exists('AiCustomParsedown')) { require_once plugin_dir_path(__FILE__) . 'includes/AiCustomParsedown.php'; } function ai_optimizer_enqueue_assets() { wp_enqueue_style('ai-optimizer-style', plugin_dir_url(__FILE__) . 'assets/css/ai-content-optimizer-style.css', array(), filemtime(plugin_dir_path(__FILE__) . 'assets/css/ai-content-optimizer-style.css')); wp_enqueue_script('ai-optimizer-script', plugin_dir_url(__FILE__) . 'assets/js/ai-content-optimizer.js', array('jquery'), '1.0.0', true); // Generate and pass nonce to JavaScript wp_localize_script('ai-optimizer-script', 'aiOptimizerData', array( 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('ai_optimizer_nonce') )); } add_action('admin_enqueue_scripts', 'ai_optimizer_enqueue_assets'); // Include AI Analysis Functions require_once plugin_dir_path(__FILE__) . 'includes/ai-content-analyzer.php'; function ai_optimize_content() { // Check if the nonce is valid $nonce = isset($_POST['_ajax_nonce']) ? sanitize_text_field(wp_unslash($_POST['_ajax_nonce'])) : ''; if (!wp_verify_nonce($nonce, 'ai_optimizer_nonce')) { wp_die('Unauthorized request.'); } // Retrieve and sanitize content $content = isset($_POST['content']) ? sanitize_text_field(wp_unslash($_POST['content'])) : ''; if (empty($content)) { esc_html_e('Content is required.', 'ai-content-optimizer'); wp_die(); } // Process the sanitized content $suggestions = ai_content_optimizer_analyze($content); // Output the suggestions safely echo wp_kses_post($suggestions); wp_die(); // Properly end AJAX response } add_action('wp_ajax_ai_optimize_content', 'ai_optimize_content'); // Add meta box to the post editor function ai_optimizer_add_meta_box() { add_meta_box('ai_optimizer_meta', 'AI Content Suggestions', 'ai_optimizer_meta_box_callback', 'post', 'side', 'high'); } add_action('add_meta_boxes', 'ai_optimizer_add_meta_box'); function ai_optimizer_meta_box_callback($post) { echo '
'; echo '

Loading suggestions...

'; echo ''; // Placeholder for suggestions echo '
'; echo ''; echo ''; } // Register settings page function ai_optimizer_register_settings_page() { add_options_page( 'AI Content Optimizer Settings', 'AI Content Optimizer', 'manage_options', 'ai-content-optimizer', 'ai_optimizer_settings_page' ); } add_action('admin_menu', 'ai_optimizer_register_settings_page'); // Settings page content function ai_optimizer_settings_page() { ?>

AI Content Optimizer Settings

'sanitize_text_field' ]); register_setting('ai_optimizer_settings', 'ai_optimizer_endpoint', [ 'sanitize_callback' => 'esc_url_raw' ]); register_setting('ai_optimizer_settings', 'ai_optimizer_model', [ 'sanitize_callback' => 'sanitize_text_field' ]); register_setting('ai_optimizer_settings', 'ai_optimizer_temperature', [ 'sanitize_callback' => 'floatval' ]); register_setting('ai_optimizer_settings', 'ai_optimizer_max_tokens', [ 'sanitize_callback' => 'intval' ]); register_setting('ai_optimizer_settings', 'ai_optimizer_system_message', [ 'sanitize_callback' => 'sanitize_textarea_field' ]); register_setting('ai_optimizer_settings', 'ai_optimizer_user_message', [ 'sanitize_callback' => 'sanitize_textarea_field' ]); add_settings_field('ai_optimizer_system_message', 'System Message', 'ai_optimizer_system_message_callback', 'ai-content-optimizer', 'ai_optimizer_section'); add_settings_field('ai_optimizer_user_message', 'User Message', 'ai_optimizer_user_message_callback', 'ai-content-optimizer', 'ai_optimizer_section'); add_settings_section('ai_optimizer_section', 'API Settings', null, 'ai-content-optimizer'); add_settings_field('ai_optimizer_api_key', 'API Key', 'ai_optimizer_api_key_callback', 'ai-content-optimizer', 'ai_optimizer_section'); add_settings_field('ai_optimizer_endpoint', 'API Endpoint', 'ai_optimizer_endpoint_callback', 'ai-content-optimizer', 'ai_optimizer_section'); add_settings_field('ai_optimizer_model', 'Model', 'ai_optimizer_model_callback', 'ai-content-optimizer', 'ai_optimizer_section'); add_settings_field('ai_optimizer_temperature', 'Temperature', 'ai_optimizer_temperature_callback', 'ai-content-optimizer', 'ai_optimizer_section'); add_settings_field('ai_optimizer_max_tokens', 'Max Tokens', 'ai_optimizer_max_tokens_callback', 'ai-content-optimizer', 'ai_optimizer_section'); } add_action('admin_init', 'ai_optimizer_register_settings'); // Callback functions for each field function ai_optimizer_api_key_callback() { $api_key = get_option('ai_optimizer_api_key', ''); echo ""; } function ai_optimizer_endpoint_callback() { $endpoint = get_option('ai_optimizer_endpoint', 'https://api.openai.com/v1/completions'); echo ""; } function ai_optimizer_model_callback() { $model = get_option('ai_optimizer_model', 'gpt-3.5-turbo'); echo ""; } function ai_optimizer_temperature_callback() { $temperature = get_option('ai_optimizer_temperature', '0.7'); echo ""; } function ai_optimizer_max_tokens_callback() { $max_tokens = get_option('ai_optimizer_max_tokens', '500'); echo ""; } function ai_optimizer_system_message_callback() { $system_message = get_option('ai_optimizer_system_message', 'You are an AI assistant that provides SEO, readability, keyword usage, and engagement improvements.'); echo ""; } function ai_optimizer_user_message_callback() { $user_message = get_option('ai_optimizer_user_message', 'Analyze the following content and suggest improvements for SEO, readability, keyword usage, and engagement:'); echo ""; }