2026年5月20日
2026年5月20日
WordPressのコメント送信でエラーが出る場合の解決方法
はじめに
WordPressのコメントフォームに内容を入力して送信ボタンを押すと「申し訳ありませんが、コメントを送信できませんでした」と表示される、コメントが届いているはずなのに確認画面でエラーが出る、スパムフィルターに正常なコメントが引っかかってしまう。コメント送信エラーは設定・スパムフィルター・nonce問題が原因であることが多いです。
症状・原因
コメント送信エラーの主な原因:
- nonceの期限切れ:ページを長時間開いたままコメントを送信するとnonceが無効
- コメントの必須フィールド未入力:名前・メールが必須に設定されているが空
- Akismetによるスパム判定:正常なコメントがスパムと誤判定される
- コメント投稿のURL設定ミス:
wp-comments-post.phpへのパスが間違っている - セキュリティプラグインのブロック:WAFがコメント送信をブロックしている
- コメント機能の無効化:設定でコメントが無効になっている
解決手順
ステップ1:コメント設定を確認する
1. 管理画面 → 設定 → ディスカッション
2. 「投稿へのコメントを許可する」にチェックが入っているか確認
3. 「コメントの投稿者の名前とメールアドレスの入力を必須にする」の設定を確認
4. 「コメントの表示前に手動で承認する」が有効かどうか確認
ステップ2:コメントフォームのアクションURLを確認する
<!-- コメントフォームの正しいアクションURL -->
<form action="<?php echo esc_url(site_url('/wp-comments-post.php')); ?>" method="post">
カスタムテーマでアクションURLが間違っている場合に送信エラーが発生します。
ステップ3:コメントフォームにnonceを追加する
// カスタムコメントフォームにnonceを追加(必須)
<?php comment_id_fields(); ?> // コメントIDフィールドを追加
<?php wp_nonce_field('comment_nonce_action', 'comment_nonce_field'); ?>
または WordPressの標準コメントフォームを使う:
<?php comment_form(); ?> // 標準フォームはnonceを自動で追加
ステップ4:Akismetの設定を確認する
# Akismetのステータスを確認
wp eval 'var_dump(akismet_get_key());'
# APIキーが設定されているか確認
wp option get wordpress_api_key
Akismetが正常なコメントをスパム判定している場合:
1. コメント → スパム でスパムボックスを確認
2. 正常なコメントを「スパムではない」としてマーク
3. Akismetの感度設定を調整
ステップ5:プラグインの競合を確認する
# セキュリティ系プラグインを一時的に無効化してテスト
wp plugin deactivate wordfence
wp plugin deactivate all-in-one-wp-security-and-firewall
# コメント送信をテスト
# 成功したら該当プラグインの設定でコメント送信を許可
ステップ6:コメントのバリデーションをカスタマイズする
// functions.php — コメントのバリデーションをカスタマイズ
add_filter('preprocess_comment', function($commentdata) {
// コメント内容が空の場合はエラー
if (empty(trim($commentdata['comment_content']))) {
wp_die('コメント内容を入力してください。', 'コメントエラー', [
'back_link' => true,
]);
}
return $commentdata;
});
// コメント送信後のリダイレクト先をカスタマイズ
add_filter('comment_post_redirect', function($location, $comment) {
return get_permalink($comment->comment_post_ID) . '#comment-' . $comment->comment_ID;
}, 10, 2);
ステップ7:コメントの通知メールを確認する
// functions.php — コメント通知先をカスタマイズ
add_filter('comment_notification_recipients', function($emails, $comment_id) {
$emails[] = 'admin@yoursite.com';
return $emails;
}, 10, 2);
注意事項
- コメントスパムが多い場合はAkismetに加えてreCAPTCHAの導入も検討してください。
- WordPressのコメント機能は不要であれば設定 → ディスカッションで完全に無効化できます。
まとめ
コメント送信エラーの多くはディスカッション設定の確認とnonceの問題で解決します。Akismetによる誤判定はスパムボックスを確認してマーク解除し、セキュリティプラグインとの競合は個別に設定で許可してください。関連記事:スパムコメント対策、コメントフォームのカスタマイズ