MENU

【忘備録】ワードプレスにChatGPTを組み込む(簡易ツール・プラグイン作成)

【忘備録】ワードプレスにchatgptを組み込む(簡易ツール・プラグイン)

wp-content/plugins
chatgpt-admin-tool フォルダ作成し、
chatgpt-admin-tool.php という名前保存ください。

目次

chatgpt-admin-tool.php

<?php
/*
Plugin Name: ChatGPT Admin Tool (Multisite Ready)
Description: WordPress管理画面でChatGPTに質問できる簡易ツール(マルチサイト対応)
Version: 1.1
Author: Your Name
*/

// 管理メニューに「ChatGPT」を追加(マルチサイトでも子サイトで使用可能)
add_action('admin_menu', function () {
if (current_user_can('manage_options')) {
add_menu_page(
'ChatGPT Admin',
'ChatGPT',
'manage_options',
'chatgpt-admin',
'chatgpt_admin_page',
'dashicons-format-chat'
);
}
});

// 管理画面に表示されるページの内容
function chatgpt_admin_page() {
?>
<div class="wrap">
<h1>💬 ChatGPT 管理アシスタント</h1>
<textarea id="chatInput" rows="4" style="width:100%;"></textarea><br>
<button id="sendToGPT" class="button button-primary">ChatGPTに送信</button>
<div id="responseBox" style="margin-top:1em; white-space:pre-wrap; background:#f9f9f9; padding:10px; border:1px solid #ccc;"></div>
</div>

<script>
document.getElementById('sendToGPT').addEventListener('click', async () => {
const prompt = document.getElementById('chatInput').value;
const responseBox = document.getElementById('responseBox');
responseBox.innerText = 'ChatGPTからの応答を待っています...';

const res = await fetch('<?php echo esc_url(admin_url('admin-ajax.php')); ?>', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
action: 'chatgpt_request',
prompt: prompt
})
});

const data = await res.json();
responseBox.innerText = data.response;
});
</script>
<?php
}

// Ajaxハンドラの登録(全サイト共通)
add_action('wp_ajax_chatgpt_request', 'handle_chatgpt_request');

// ChatGPTへのリクエスト処理
function handle_chatgpt_request() {
$prompt = sanitize_text_field($_POST['prompt']);

// APIキーの取得(必要に応じて get_site_option に変更可能)
$api_key = get_option('chatgpt_api_key');

if (empty($api_key)) {
wp_send_json(['response' => 'APIキーが設定されていません。']);
}

$response = wp_remote_post('https://api.openai.com/v1/chat/completions', [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key,
],
'body' => json_encode([
'model' => 'gpt-3.5-turbo',
'messages' => [
['role' => 'system', 'content' => 'あなたは親切なWordPressアシスタントです。'],
['role' => 'user', 'content' => $prompt],
],
'temperature' => 0.7,
])
]);

if (is_wp_error($response)) {
wp_send_json(['response' => '通信エラーが発生しました。']);
}

$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);

if (isset($data['choices'][0]['message']['content'])) {
wp_send_json(['response' => $data['choices'][0]['message']['content']]);
} else {
wp_send_json(['response' => 'ChatGPTの応答を取得できませんでした。']);
}
}

動かない場合の想定れる原因解決

OpenAI APIキーっている / 空欄っている

確認:

  • 本物APIキー(sk-... 始まる文字列)入力ていますか?

 修正例:

php
$api_key = 'sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // 実際のAPIキーを入力

OpenAI APIレスポンス形式想定っている(構造変更エラー時)

現状取得処理:

php
$data['choices'][0]['message']['content']

上記存在しない場合(例:APIエラー、上限超過、キー無効など)null なるため、エラーメッセージ出力ます。

改善版(レスポンスチェック強化):

以下ように、レスポンス全体ログ出力したり、エラー原因把握できるようにします:

php
if (isset($data['error'])) {
  wp_send_json(['response' => 'OpenAIエラー: ' . $data['error']['message']]);
}
if (isset($data['choices'][0]['message']['content'])) {
  wp_send_json(['response' => $data['choices'][0]['message']['content']]);
} else
  { wp_send_json(['response' => 'ChatGPTの応答を取得できませんでした(構造不明)']);
}

API通信自体失敗いる(wp_remote_post()失敗)

 対処:

  • 通信失敗した場合is_wp_error($response) ログ出力すると原因ます。

 ログ強化:

php
if (is_wp_error($response)) {
  wp_send_json(['response' => '通信エラー: ' . $response->get_error_message()]);
}

API利用制限/優れた追い越すアカウント認証

確認方法:

⑤:使用状況確認

 https://platform.openai.com/account/usage
ここで「今月使用量」「上限」「支払いステータス」確認できます。

⑥:課金有効

https://platform.openai.com/account/billing/overview
上記ページで、支払い方法(クレカ)登録する必要あります。

  • 無料ユーザーは $0 まだAPI利用制限ます

  • クレカ登録し、「Pay-as-you-go(使だけ課金)」有効すること制限解除ます

注意点:ChatGPTAPI別物

ChatGPT Plus(月額$20) OpenAI API
ブラウザ上のチャット利用 外部アプリ(WordPress等)から利用
ChatGPT(chat.openai.com)にログインして使う APIキーを発行して外部サービスと連携
月額固定 従量課金(使った分だけ請求)

ChatGPT Plus登録ていも、API利用別途課金設定必要です。

 

まとめ

どうしても「ワードプレスの管理画面内でChatgptを使用したい時のみ」しか今のところは必要がないかと思われます。(従量課金なので)

必要な方は、コピーしてお使いください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次