워드프레스 AI 플러그인 구축 방법 (단계별 가이드 2026)

작성자

카테고리:

← 피드로
DEV Community · Serhii Kalyna · 2026-06-11 개발(SW)
Cover image for How to Build a WordPress AI Plugin (Step-by-Step Guide 2026)

Serhii Kalyna

How to Build a WordPress AI Plugin (Step-by-Step Guide 2026)

This guide builds a complete WordPress plugin with AI content generation: settings page, OpenAI API wrapper, secure AJAX handlers, and a Gutenberg sidebar panel.

Plugin Structure

wp-ai-assistant/
├── wp-ai-assistant.php    # Headers + init
├── includes/class-api.php # OpenAI wrapper
├── includes/class-ajax.php# AJAX handlers
└── assets/editor.js       # Gutenberg sidebar

Enter fullscreen mode Exit fullscreen mode

OpenAI Wrapper

class WP_AI_Assistant_API {
    public function generate(string $prompt): string {
        $client = OpenAI::client(get_option('wp_ai_assistant_api_key'));
        $response = $client->chat()->create([
            'model' => 'gpt-4o-mini',
            'messages' => [['role' => 'user', 'content' => $prompt]],
        ]);
        return $response->choices[0]->message->content;
    }
}

Enter fullscreen mode Exit fullscreen mode

Secure AJAX Handler

add_action('wp_ajax_wp_ai_generate', function () {
    check_ajax_referer('wp_ai_assistant_nonce', 'nonce');
    if (!current_user_can('edit_posts')) wp_send_json_error('Forbidden', 403);
    $prompt = sanitize_textarea_field($_POST['prompt'] ?? '');
    try {
        $result = (new WP_AI_Assistant_API())->generate($prompt);
        wp_send_json_success(['content' => $result]);
    } catch (Exception $e) {
        wp_send_json_error($e->getMessage());
    }
});

Enter fullscreen mode Exit fullscreen mode

Gutenberg Sidebar (editor.js)

const { registerPlugin } = wp.plugins;
registerPlugin('wp-ai-assistant', { render: AIAssistantPanel });
// Panel calls admin-ajax.php → inserts generated content as a paragraph block

Enter fullscreen mode Exit fullscreen mode

Security Checklist

  • check_ajax_referer() on every AJAX action
  • current_user_can() before processing
  • sanitize_* on all inputs, esc_* on all outputs
  • Store API key in wp_options, never in code

Originally published at kalyna.pro

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다