WordPress网站如何接入Gemini AI模型API实现自动内容生成

在当今内容创作需求日益增长的环境下,将WordPress网站与Gemini AI模型API集成已成为许多网站管理员的选择。这种集成能够实现自动化内容生成,大幅提升内容生产效率。下面我们将详细介绍如何完成这一集成过程。

获取Gemini API密钥

要开始集成过程,首先需要获取Google Gemini API的访问密钥。以下是具体步骤:

  1. 访问Google AI Studio网站(aistudio.google.com)
  2. 使用Google账户登录
  3. 导航至API密钥管理部分
  4. 创建新的API密钥
  5. 妥善保存生成的密钥,后续配置中需要使用

请注意,API密钥是敏感信息,应当妥善保管,不要在代码中直接暴露或在公共场合分享。Google目前提供了Gemini 2.5 Flash Image等模型,这些模型支持文本生成、图像处理等多种功能,可以满足不同类型的内容创作需求。

在WordPress中安装必要插件

WordPress本身不直接支持Gemini API调用,因此需要借助特定插件或自定义代码来实现集成。以下是两种主要方法:

方法一:使用现成的AI集成插件

WordPress插件市场中有一些支持AI集成的插件,虽然可能没有专门针对Gemini的插件,但许多通用AI插件支持自定义API端点:

  1. 登录WordPress后台
  2. 导航至"插件" > "安装插件"
  3. 搜索"AI Content Generator"或"OpenAI API"等关键词
  4. 选择评分高、更新频繁的插件安装并激活
  5. 在插件设置中配置Gemini API端点和密钥

方法二:自定义代码集成

对于需要更高定制性的网站,可以通过自定义代码实现集成。首先,需要在主题的functions.php文件中添加相关代码,或者创建自定义插件。


// 添加Gemini API集成功能
function gemini_api_integration() {
    // 检查用户权限
    if (!current_user_can('edit_posts')) {
        return;
    }
    
    // 获取API密钥(建议存储在WordPress选项中)
    $api_key = get_option('gemini_api_key');
    
    // 设置API端点
    $api_endpoint = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent';
    
    // 构建请求参数
    $prompt = "请根据以下主题生成一篇WordPress相关的文章:人工智能在内容创作中的应用";
    $request_body = array(
        'contents' => array(
            array(
                'parts' => array(
                    array('text' => $prompt)
                )
            )
        )
    );
    
    // 发送API请求
    $response = wp_remote_post(
        $api_endpoint . '?key=' . $api_key,
        array(
            'headers' => array('Content-Type' => 'application/json'),
            'body' => json_encode($request_body),
            'timeout' => 30
        )
    );
    
    // 处理响应
    if (is_wp_error($response)) {
        return 'API请求失败: ' . $response->get_error_message();
    }
    
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    
    // 提取生成的内容
    if (isset($data['candidates'][0]['content']['parts'][0]['text'])) {
        return $data['candidates'][0]['content']['parts'][0]['text'];
    } else {
        return '无法解析API响应';
    }
}

这段代码创建了一个基本函数,用于调用Gemini API生成内容。函数首先检查用户权限,然后从WordPress选项中获取API密钥,构建请求参数并发送API请求,最后处理并返回生成的内容。注意,实际使用时需要替换API端点以匹配您使用的具体Gemini模型版本。

创建自定义管理界面

为了方便使用,可以在WordPress后台创建一个管理界面,让用户能够输入提示词并生成内容:


// 添加管理菜单
function gemini_api_menu() {
    add_menu_page(
        'Gemini AI内容生成器',
        'Gemini AI',
        'manage_options',
        'gemini-ai',
        'gemini_ai_page_html',
        'dashicons-edit-page'
    );
}
add_action('admin_menu', 'gemini_api_menu');

// 管理页面
function gemini_ai_page_html() {
    // 检查用户权限
    if (!current_user_can('manage_options')) {
        return;
    }
    ?>
    

<?php // 处理表单提交 if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['gemini_prompt'])) { $generated_content = generate_content_with_gemini($_POST['gemini_prompt'], $_POST['gemini_length']); echo '
'; echo '

生成的内容:

'; echo ''; echo ''; echo ''; echo '
'; } ?>
document.getElementById('copy-content').addEventListener('click', function() { var content = document.querySelector('.generated-content textarea'); content.select(); document.execCommand('copy'); alert('内容已复制到剪贴板'); }); document.getElementById('create-post').addEventListener('click', function() { var content = document.querySelector('.generated-content textarea').value; var title = prompt('请输入文章标题:'); if (title) { var data = { 'action': 'create_post_from_gemini', 'title': title, 'content': content, 'nonce': '' }; jQuery.post(ajaxurl, data, function(response) { if (response.success) { alert('文章创建成功!'); window.location.href = response.data.edit_link; } else { alert('文章创建失败:' + response.data); } }); } }); $title, 'post_content' => $content, 'post_status' => 'draft', 'post_author' => get_current_user_id(), 'post_type' => 'post' )); if (is_wp_error($post_id)) { wp_send_json_error($post_id->get_error_message()); } else { wp_send_json_success(array( 'edit_link' => get_edit_post_link($post_id) )); } } add_action('wp_ajax_create_post_from_gemini', 'handle_create_post_from_gemini');

这段代码创建了一个完整的管理界面,包括表单输入、内容生成显示和文章创建功能。用户可以输入提示词和期望的内容长度,提交后系统会调用Gemini API生成内容,并提供复制和创建文章的选项。创建文章的功能通过AJAX实现,用户体验更加流畅。

WordPress网站如何接入Gemini AI模型API实现自动内容生成

实现内容生成函数

上面的代码引用了一个`generate_content_with_gemini`函数,下面是这个函数的实现:


function generate_content_with_gemini($prompt, $length = 500) {
    $api_key = get_option('gemini_api_key');
    if (empty($api_key)) {
        return '请先在设置中配置Gemini API密钥';
    }
    
    // 根据长度调整提示词
    $full_prompt = $prompt . "。请生成一篇约" . $length . "字的文章,要求内容原创、结构清晰、语言流畅。";
    
    $api_endpoint = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent';
    
    $request_body = array(
        'contents' => array(
            array(
                'parts' => array(
                    array('text' => $full_prompt)
                )
            )
        ),
        'generationConfig' => array(
            'temperature' => 0.7,
            'topK' => 40,
            'topP' => 0.95,
            'maxOutputTokens' => intval($length  1.5), // 考虑到token与汉字的比例
            'stopSequences' => array()
        )
    );
    
    $response = wp_remote_post(
        $api_endpoint . '?key=' . $api_key,
        array(
            'headers' => array('Content-Type' => 'application/json'),
            'body' => json_encode($request_body),
            'timeout' => 60
        )
    );
    
    if (is_wp_error($response)) {
        return 'API请求失败: ' . $response->get_error_message();
    }
    
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    
    if (isset($data['candidates'][0]['content']['parts'][0]['text'])) {
        return $data['candidates'][0]['content']['parts'][0]['text'];
    } else {
        return '内容生成失败,请重试或检查API配置';
    }
}

这个函数接收提示词和期望长度作为参数,构建完整的API请求,包括生成配置参数如温度、topK、topP等,这些参数影响生成内容的随机性和质量。函数发送请求后解析响应并返回生成的内容。如果出现错误,会返回相应的错误信息。

添加API配置选项

为了方便用户管理API密钥和其他设置,我们可以添加一个设置页面:


// 添加设置菜单
function gemini_api_settings_menu() {
    add_submenu_page(
        'gemini-ai',
        'Gemini API设置',
        '设置',
        'manage_options',
        'gemini-api-settings',
        'gemini_api_settings_page_html'
    );
}
add_action('admin_menu', 'gemini_api_settings_menu', 20);

// 注册设置
function gemini_api_register_settings() {
    register_setting('gemini_api_settings', 'gemini_api_key');
    register_setting('gemini_api_settings', 'gemini_model', array(
        'type' => 'string',
        'default' => 'gemini-pro',
        'sanitize_callback' => 'sanitize_text_field'
    ));
    register_setting('gemini_api_settings', 'gemini_temperature', array(
        'type' => 'number',
        'default' => 0.7,
        'sanitize_callback' => 'floatval'
    ));
}
add_action('admin_init', 'gemini_api_register_settings');

// 设置页面
function gemini_api_settings_page_html() {
    if (!current_user_can('manage_options')) {
        return;
    }
    ?>
    

Gemini API设置

<input type="password" id="gemini_api_key" name="gemini_api_key" value="" class="regular-text">

从Google AI Studio获取的API密钥

<option value="gemini-pro" > Gemini Pro <option value="gemini-1.5-pro" > Gemini 1.5 Pro <option value="gemini-1.5-flash" > Gemini 1.5 Flash

选择要使用的Gemini模型版本

<input type="range" id="gemini_temperature" name="gemini_temperature" min="0" max="1" step="0.1" value="">

控制生成内容的创造性(0为确定性,1为高度创造性)

document.getElementById('gemini_temperature').addEventListener('input', function() { document.getElementById('temperature-value').textContent = this.value; }); <?php }

这段代码创建了一个完整的设置页面,允许用户配置API密钥、选择Gemini模型版本和调整创造性参数。设置通过WordPress的设置API保存,确保安全性和持久性。页面还包括一个滑块控件,让用户可以直观地调整创造性参数。

实现定时自动内容生成

除了手动生成内容,我们还可以设置定时任务,自动生成和发布内容:


// 添加定时任务
function schedule_gemini_content_generation() {
    if (!wp_next_scheduled('generate_gemini_content_event')) {
        wp_schedule_event(time(), 'daily', 'generate_gemini_content_event');
    }
}
add_action('wp', 'schedule_gemini_content_generation');

// 定时任务回调函数
function generate_gemini_content() {
    $api_key = get_option('gemini_api_key');
    if (empty($api_key)) {
        return;
    }
    
    // 获取预设的主题列表
    $topics = get_option('gemini_auto_topics', array(
        '人工智能在WordPress开发中的应用',
        '如何优化WordPress网站性能',
        'WordPress安全最佳实践',
        'SEO优化与WordPress',
        'WordPress插件开发入门'
    ));
    
    // 随机选择一个主题
    $topic = $topics[array_rand($topics)];
    
    // 生成内容
    $content = generate_content_with_gemini($topic, 800);
    
    if (strpos($content, '失败') === false) {
        // 创建文章
        $post_id = wp_insert_post(array(
            'post_title' => $topic,
            'post_content' => $content,
            'post_status' => 'draft', // 可以改为'publish'直接发布
            'post_author' => 1, // 管理员ID
            'post_type' => 'post',
            'post_category' => array(1) // 默认分类
        ));
        
        if (!is_wp_error($post_id)) {
            // 可选:发送通知邮件
            $admin_email = get_option('admin_email');
            $subject = '新内容已生成:' . $topic;
            $message = "已根据主题 "$topic" 生成新文章,请查看并编辑后发布。nn";
            $message .= "编辑链接: " . get_edit_post_link($post_id);
            wp_mail($admin_email, $subject, $message);
        }
    }
}
add_action('generate_gemini_content_event', 'generate_gemini_content');

// 添加自动生成设置
function gemini_auto_generation_settings() {
    add_settings_field(
        'gemini_auto_topics',
        '自动生成主题列表',
        'gemini_auto_topics_callback',
        'gemini_api_settings',
        'gemini_api_settings_section'
    );
    
    register_setting('gemini_api_settings', 'gemini_auto_topics');
}
add_action('admin_init', 'gemini_auto_generation_settings');

function gemini_auto_topics_callback() {
    $topics = get_option('gemini_auto_topics', array());
    ?>
    
    

每行输入一个主题,系统将随机选择主题生成内容

<?php }

这段代码实现了定时自动内容生成功能。首先,它设置了一个每日执行的定时任务,任务会从预设的主题列表中随机选择一个主题,使用Gemini API生成内容,然后创建一篇新文章。文章默认保存为草稿状态,管理员可以审核后发布。系统还会发送通知邮件给管理员。同时,代码还添加了设置选项,让用户可以自定义主题列表。

处理API限制和错误

在使用Gemini API时,可能会遇到各种限制和错误情况,我们需要妥善处理这些问题:


// 增强版内容生成函数,包含错误处理
function generate_content_with_gemini_enhanced($prompt, $length = 500) {
    $api_key = get_option('gemini_api_key');
    if (empty($api_key)) {
        return array('success' => false, 'message' => '请先在设置中配置Gemini API密钥');
    }
    
    // 检查API调用频率限制
    $last_call = get_option('gemini_last_api_call', 0);
    $min_interval = 1; // 最小调用间隔(秒)
    if (time() - $last_call  false, 'message' => 'API调用过于频繁,请稍后再试');
    }
    
    // 记录API调用时间
    update_option('gemini_last_api_call', time());
    
    // 记录API调用次数(用于配额管理)
    $call_count = intval(get_option('gemini_api_call_count', 0));
    update_option('gemini_api_call_count', $call_count + 1);
    
    $full_prompt = $prompt . "。请生成一篇约" . $length . "字的文章,要求内容原创、结构清晰、语言流畅。";
    
    $model = get_option('gemini_model', 'gemini-pro');
    $temperature = floatval(get_option('gemini_temperature', 0.7));
    
    $api_endpoint = 'https://generativelanguage.googleapis.com/v1beta/models/' . $model . ':generateContent';
    
    $request_body = array(
        'contents' => array(
            array(
                'parts' => array(
                    array('text' => $full_prompt)
                )
            )
        ),
        'generationConfig' => array(
            'temperature' => $temperature,
            'topK' => 40,
            'topP' => 0.95,
            'maxOutputTokens' => intval($length  1.5),
            'stopSequences' => array()
        )
    );
    
    $response = wp_remote_post(
        $api_endpoint . '?key=' . $api_key,
        array(
            'headers' => array('Content-Type' => 'application/json'),
            'body' => json_encode($request_body),
            'timeout' => 60
        )
    );
    
    if (is_wp_error($response)) {
        $error_message = $response->get_error_message();
        // 记录错误
        error_log('Gemini API Error: ' . $error_message);
        return array('success' => false, 'message' => 'API请求失败: ' . $error_message);
    }
    
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    
    // 检查API错误
    if (isset($data['error'])) {
        $error_message = $data['error']['message'];
        error_log('Gemini API Error: ' . $error_message);
        
        // 处理特定错误
        if (strpos($error_message, 'quota') !== false) {
            return array('success' => false, 'message' => 'API配额已用完,请明天再试或升级配额');
        } elseif (strpos($error_message, 'invalid API key') !== false) {
            return array('success' => false, 'message' => 'API密钥无效,请检查设置');
        } else {
            return array('success' => false, 'message' => 'API错误: ' . $error_message);
        }
    }
    
    if (isset($data['candidates'][0]['content']['parts'][0]['text'])) {
        $content = $data['candidates'][0]['content']['parts'][0]['text'];
        // 检查内容是否被截断
        if (isset($data['candidates'][0]['finishReason']) && $data['candidates'][0]['finishReason'] === 'MAX_TOKENS') {
            return array('success' => true, 'content' => $content, 'warning' => '内容可能因长度限制被截断');
        }
        return array('success' => true, 'content' => $content);
    } else {
        return array('success' => false, 'message' => '无法解析API响应');
    }
}

这个增强版的内容生成函数包含了全面的错误处理机制。它会检查API调用频率限制,记录API调用次数用于配额管理,并处理各种可能的API错误情况,包括配额用完、无效API密钥等。函数返回一个包含成功状态、内容或错误消息的数组,便于调用方处理不同情况。所有错误都会记录到WordPress错误日志中,方便排查问题。

集成到WordPress编辑器

为了提供更好的用户体验,我们可以将Gemini AI集成到WordPress编辑器中,让用户在编辑文章时直接使用AI功能:


// 添加编辑器按钮
function add_gemini_button_to_editor() {
    if (!current_user_can('edit_posts')) {
        return;
    }
    
    wp_enqueue_script('gemini-editor-integration', plugin_dir_url(__FILE__) . 'js/gemini-editor.js', array('jquery', 'wp-editor'), '1.0', true);
    
    wp_localize_script('gemini-editor-integration', 'geminiEditor', array(
        'ajaxUrl' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('gemini_editor_nonce'),
        'loadingText' => '正在生成内容...'
    ));
}
add_action('enqueue_block_editor_assets', 'add_gemini_button_to_editor');

// 处理AJAX请求
function handle_gemini_editor_request() {
    check_ajax_referer('gemini_editor_nonce', 'nonce');
    
    if (!current_user_can('edit_posts')) {
        wp_send_json_error('权限不足');
    }
    
    $prompt = sanitize_text_field($_POST['prompt']);
    $length = intval($_POST['length']);
    
    $result = generate_content_with_gemini_enhanced($prompt, $length);
    
    if ($result['success']) {
        wp_send_json_success(array(
            'content' => $result['content'],
            'warning' => isset($result['warning']) ? $result['warning'] : ''
        ));
    } else {
        wp_send_json_error($result['message']);
    }
}
add_action('wp_ajax_gemini_generate_content', 'handle_gemini_editor_request');

这段PHP代码添加了必要的脚本和AJAX处理函数。接下来,我们需要创建JavaScript文件(gemini-editor.js)来处理编辑器集成:


// gemini-editor.js
(function($) {
    'use strict';
    
    $(document).ready(function() {
        // 添加工具栏按钮
        if (wp && wp.editor && wp.editor.addButton) {
            // 适用于经典编辑器
            wp.editor.addButton('gemini_ai_button', {
                text: 'AI生成内容',
                icon: 'dashicons-edit-page',
                onclick: function() {
                    showGeminiDialog();
                }
            });
        }
        
        // 适用于块编辑器(Gutenberg)
        if (wp && wp.data && wp.plugins) {
            const { registerPlugin } = wp.plugins;
            const { PluginSidebar, PluginSidebarMoreMenuItem } = wp.editPost;
            const { Button, TextareaControl, TextControl, Spinner } = wp.components;
            const { useDispatch, useSelect } = wp.data;
            const { useState } = wp.element;
            
            const GeminiAISidebar = () => {
                const [prompt, setPrompt] = useState('');
                const [length, setLength] = useState(500);
                const [isLoading, setIsLoading] = useState(false);
                const [result, setResult] = useState('');
                const [error, setError] = useState('');
                
                const { insertBlock } = useDispatch('core/block-editor');
                
                const generateContent = () => {
                    if (!prompt.trim()) {
                        setError('请输入提示词');
                        return;
                    }
                    
                    setIsLoading(true);
                    setError('');
                    
                    $.ajax({
                        url: geminiEditor.ajaxUrl,
                        type: 'POST',
                        data: {
                            action: 'gemini_generate_content',
                            nonce: geminiEditor.nonce,
                            prompt: prompt,
                            length: length
                        },
                        success: function(response) {
                            if (response.success) {
                                setResult(response.data.content);
                                if (response.data.warning) {
                                    setError(response.data.warning);
                                }
                            } else {
                                setError(response.data);
                            }
                        },
                        error: function() {
                            setError('请求失败,请重试');
                        },
                        complete: function() {
                            setIsLoading(false);
                        }
                    });
                };
                
                const insertContent = () => {
                    if (result) {
                        // 创建段落块
                        const block = wp.blocks.createBlock('core/paragraph', {
                            content: result
                        });
                        
                        // 插入到编辑器
                        insertBlock(block);
                    }
                };
                
                return (
                    
                        
setPrompt(value)} help="描述您想要生成的内容" /> setLength(parseInt(value) || 500)} min="100" max="2000" /> {error && (
{error}
)} {result && (
setResult(value)} />
)}
); }; registerPlugin('gemini-ai-plugin', { render: () => ( Gemini AI > ) }); } }); })(jQuery); </code>

这段JavaScript代码实现了与WordPress编辑器的集成。对于经典编辑器,它添加了一个工具栏按钮;对于块编辑器(Gutenberg),它创建了一个侧边栏插件。用户可以在侧边栏中输入提示词和期望的内容长度,点击生成按钮后,系统会通过AJAX调用Gemini API生成内容,并将结果显示在编辑器中。用户还可以一键将生成的内容插入到文章中。这种集成方式大大提升了用户体验,让AI内容生成成为文章创作流程的自然部分。

性能优化和缓存策略

为了提高系统性能并减少API调用次数,我们可以实现缓存策略:


// 增强版内容生成函数,添加缓存支持
function generate_content_with_gemini_cached($prompt, $length = 500, $use_cache = true) {
    // 生成缓存键
    $cache_key = 'gemini_' . md5($prompt . $length);
    
    // 尝试从缓存获取
    if ($use_cache) {
        $cached_content = get_transient($cache_key);
        if ($cached_content !== false) {
            return array(
                'success' => true, 
                'content' => $cached_content,
                'from_cache' => true
            );
        }
    }
    
    // 调用API生成内容
    $result = generate_content_with_gemini_enhanced($prompt, $length);
    
    // 如果成功,缓存结果
    if ($result['success']) {
        // 缓存7天
        set_transient($cache_key, $result['content'], WEEK_IN_SECONDS);
        
        // 添加缓存标记
        $result['from_cache'] = false;
    }
    
    return $result;
}

// 添加缓存管理功能
function gemini_cache_management() {
    add_submenu_page(
        'gemini-ai',
        'Gemini缓存管理',
        '缓存管理',
        'manage_options',
        'gemini-cache-management',
        'gemini_cache_management_page'
    );
}
add_action('admin_menu', 'gemini_cache_management', 30);

function gemini_cache_management_page() {
    if (!current_user_can('manage_options')) {
        return;
    }
    
    // 处理清除缓存操作
    if (isset($_POST['clear_cache']) && check_admin_referer('gemini_clear_cache')) {
        global $wpdb;
        
        // 删除所有Gemini相关的缓存
        $wpdb->query(
            $wpdb->prepare(
                "DELETE FROM $wpdb->options WHERE option_name LIKE %s",
                $wpdb->esc_like('_transient_gemini_') . '%'
            )
        );
        
        $wpdb->query(
            $wpdb->prepare(
                "DELETE FROM $wpdb->options WHERE option_name LIKE %s",
                $wpdb->esc_like('_transient_timeout_gemini_') . '%'
            )
        );
        
        echo '

缓存已清除

'; } // 获取缓存统计信息 global $wpdb; $cache_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT() FROM $wpdb->options WHERE option_name LIKE %s", $wpdb->esc_like('_transient_gemini_') . '%' ) ); // 获取缓存大小估算 $cache_size = 0; $caches = $wpdb->get_results( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name LIKE %s", $wpdb->esc_like('_transient_gemini_') . '%' ) ); foreach ($caches as $cache) { $cache_size += strlen($cache->option_value); } // 转换为易读格式 $cache_size_readable = size_format($cache_size, 2); ?>

Gemini缓存管理

缓存统计

缓存条目数
缓存大小
缓存有效期 7天

缓存操作

清除缓存将删除所有Gemini生成的内容缓存,下次请求时将重新调用API生成内容。

最近的缓存

get_results( $wpdb->prepare( "SELECT option_name, option_value FROM $wpdb->options WHERE option_name LIKE %s ORDER BY option_id DESC LIMIT 10", $wpdb->esc_like('_transient_gemini_') . '%' ) ); if ($recent_caches) { echo ''; echo ''; foreach ($recent_caches as $cache) { // 提取提示词(从缓存键中) $prompt = substr($cache->option_name, strlen('_transient_gemini_')); $prompt = substr($prompt, 0, 32); // 显示前32个字符 // 内容预览 $content_preview = substr($cache->option_value, 0, 100) . '...'; echo ''; echo ''; echo ''; echo ''; } echo '
提示词内容预览
' . esc_html($prompt) . '' . esc_html($content_preview) . '
'; } else { echo '

没有缓存项

'; } ?>
<?php }

这段代码实现了缓存功能,可以显著提高系统性能并减少API调用成本。主要功能包括:

  1. 缓存生成的内容,避免重复调用API
  2. 缓存管理界面,显示缓存统计信息
  3. 清除缓存功能,方便管理
  4. 查看最近缓存的内容

缓存使用WordPress的transient API实现,默认有效期为7天。缓存键基于提示词和内容长度生成,确保相同的请求会返回缓存的内容。在缓存管理界面,管理员可以查看缓存统计信息,包括缓存条目数和大小,以及清除所有缓存。这种缓存策略可以大幅减少API调用次数,提高响应速度,降低使用成本。

安全性考虑

在集成Gemini AI模型API时,安全性是不可忽视的重要因素。以下是一些关键的安全措施:


// 添加安全验证
function gemini_api_security_check() {
    // 检查用户权限
    if (!current_user_can('edit_posts')) {
        wp_die('您没有足够的权限执行此操作');
    }
    
    // 验证nonce
    $nonce = isset($_REQUEST['_wpnonce']) ? $_REQUEST['_wpnonce'] : '';
    if (!wp_verify_nonce($nonce, 'gemini_nonce')) {
        wp_die('安全验证失败,请重试');
    }
    
    // 检查API密钥是否设置
    $api_key = get_option('gemini_api_key');
    if (empty($api_key)) {
        wp_die('API密钥未配置');
    }
    
    // 限制API调用频率
    $user_id = get_current_user_id();
    $rate_limit_key = 'gemini_rate_limit_' . $user_id;
    $last_call = get_transient($rate_limit_key);
    
    if ($last_call !== false) {
        wp_die('请求过于频繁,请稍后再试');
    }
    
    // 设置调用频率限制(每分钟最多10次)
    set_transient($rate_limit_key, time(), MINUTE_IN_SECONDS / 10);
}
add_action('before_gemini_api_call', 'gemini_api_security_check');

// 内容安全过滤
function gemini_content_security_filter($content) {
    // 检查敏感词
    $sensitive_words = array(
        '暴力', '色情', '赌博', '毒品', '违法', '诈骗'
    );
    
    foreach ($sensitive_words as $word) {
        if (strpos($content, $word) !== false) {
            return false; // 发现敏感词,标记为不安全
        }
    }
    
    // 检查外部链接
    $link_count = substr_count($content, 'http');
    if ($link_count > 5) {
        return false; // 外部链接过多,可能不安全
    }
    
    // 检查JavaScript代码
    if (strpos($content, ' false,
                'message' => '生成的内容未通过安全检查,请修改提示词后重试'
            );
        }
        
        // 更新结果为过滤后的内容
        $result['content'] = $filtered_content;
    }
    
    return $result;
}

// 添加IP白名单功能
function gemini_ip_whitelist_check() {
    $whitelist = get_option('gemini_ip_whitelist', array());
    
    if (!empty($whitelist)) {
        $user_ip = $_SERVER['REMOTE_ADDR'];
        
        if (!in_array($user_ip, $whitelist)) {
            wp_die('您的IP地址未被授权访问此功能');
        }
    }
}
add_action('before_gemini_api_call', 'gemini_ip_whitelist_check', 20);

// 添加IP白名单设置
function gemini_ip_whitelist_settings() {
    add_settings_field(
        'gemini_ip_whitelist',
        'IP白名单',
        'gemini_ip_whitelist_callback',
        'gemini_api_settings',
        'gemini_api_settings_section'
    );
    
    register_setting('gemini_api_settings', 'gemini_ip_whitelist');
}
add_action('admin_init', 'gemini_ip_whitelist_settings');

function gemini_ip_whitelist_callback() {
    $whitelist = get_option('gemini_ip_whitelist', array());
    ?>
    
    

每行输入一个IP地址,留空则允许所有IP访问

<?php }

这段代码实现了多层次的安全措施,保护WordPress网站和Gemini API集成免受潜在威胁:

  1. 权限验证:确保只有具有编辑文章权限的用户才能使用AI功能
  2. Nonce验证:防止CSRF攻击,确保请求来源合法
  3. API密钥保护:检查API密钥是否已正确配置
  4. 频率限制:防止API滥用,限制每个用户的调用频率
  5. 内容过滤:检查生成的内容是否包含敏感词、过多外部链接或潜在危险的JavaScript代码
  6. IP白名单:限制只有特定IP地址的用户才能使用AI功能,提供额外的安全层

这些安全措施共同构成了一个全面的安全框架,保护网站免受各种潜在威胁。在实际部署时,建议根据网站的具体需求和安全要求调整这些措施。例如,对于内部使用的网站,可以启用IP白名单;对于公共网站,可以加强内容过滤和频率限制。