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 ') . 'assets/images/loading-spinner.gif)
Analyzing...
';
}
// 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 "";
}