「WordPressのコメントフォームに画像をアップロードしたい。」
「クチコミと一緒に画像をアップできたら内容を伝えやすいのに。」

コメントフォームを活用する機会が多いブログメディアや、商品レビューやサービスのクチコミで実際の写真を一緒に投稿できると、情報の信頼性がぐっと高まりますよね。

ただ、WordPressのコメントフォームには、通常テキストしか入力できません。そこで今回は、プラグイン無しで、コメントフォームに画像アップロード機能を実装する方法をご紹介します。

基本的にコピペで試せるようにしているので、ぜひトライしてみてください。

WordPressテーマ「GLUE」
WordPressテーマ「GLUE」
無料で高機能なWordPressテーマが手に入る。

コメントフォームに画像アップロード機能を実装する手順

今回は、WordPressのデフォルトテーマ(Twenty Twenty-One)のコメントフォームに「画像ファイルを1枚アップロードできる」最低限の仕組みを実装していきます。

仕組み自体を理解することを目的としているため、セキュリティ対策や管理機能は簡略化しています。

comments.phpを編集する

まずは、コメントフォームに画像を添付するための入力欄を追加します。

以下の記述を、comments.php内にコピペします。

既存の「comment_form(」という箇所を探して、そこを丸ごと下記に置き換える形で使用してください。
comment_form(
	array(
		// ★ 画像アップロードに必須
		'form_attributes' => array(
			'enctype' => 'multipart/form-data',
		),

		// コメント本文+画像アップロード
		'comment_field' =>
			'<p class="comment-form-image">' .
				'<label for="comment_image">画像をアップロード</label>' .
				'<input type="file" name="comment_image" id="comment_image" accept="image/jpeg,image/png,image/gif">' .
			'</p>' .

			'<p class="comment-form-comment">' .
				'<label for="comment">Comment</label>' .
				'<textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea>' .
			'</p>',
	)
);

また、以下のようにwp_list_comments()にコールバックを追加してください。

wp_list_comments(
	array(
		'callback' => 'my_comment_with_image',
	)
);

functions.phpを編集する

ここで行うのは主に次の処理です。

  • コメントフォームから送信された画像ファイルを取得
  • 画像ファイルをアップロードディレクトリに保存
  • ファイル形式は、JPEG、PNG、GIFのみ許可
  • ファイルサイズは1MBまで
  • アップロードした画像をコメントの下に表示する

以下の2つの処理を加えるため、functions.phpの最下部にそれぞれ追加してください。

functions.phpを直接編集するよりも、「Code Snippets」のようなプラグインを使うのをおすすめします。

コメント投稿時に画像を保存

add_action( 'comment_post', function ( $comment_id ) {

	if ( empty( $_FILES['comment_image']['name'] ) ) {
		return;
	}

	$file = $_FILES['comment_image'];

	// MIMEタイプ制限
	$allowed_types = array(
		'image/jpeg',
		'image/png',
		'image/gif',
	);

	// サイズ制限(1MB)
	if ( $file['size'] > 1024 * 1024 ) {
		return;
	}

	if ( ! in_array( $file['type'], $allowed_types, true ) ) {
		return;
	}

	require_once ABSPATH . 'wp-admin/includes/file.php';

	$upload = wp_handle_upload( $file, array( 'test_form' => false ) );

	if ( isset( $upload['error'] ) ) {
		return;
	}

	// コメントメタに保存
	add_comment_meta(
		$comment_id,
		'comment_image_url',
		esc_url_raw( $upload['url'] )
	);

});

コメント表示用コールバック

function my_comment_with_image( $comment, $args, $depth ) {
	$img = get_comment_meta( $comment->comment_ID, 'comment_image_url', true );
	?>

	<li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
		<article class="comment-body">
			<footer class="comment-meta">
				<b><?php comment_author(); ?></b>
			</footer>

			<div class="comment-content">
				<?php comment_text(); ?>

				<?php if ( $img ) : ?>
					<p class="comment-image">
						<img src="<?php echo esc_url( $img ); ?>" alt="" style="max-width:100%; height:auto;">
					</p>
				<?php endif; ?>
			</div>
		</article>
	</li>

	<?php
}

ここまでの変更で、コメント投稿時にテキストと一緒に、画像ファイルを送信できるようになります。この例では画像は1枚のみアップロード可能です。

こんな風に、「画像をアップロード」するという項目が表示されているはずです。

画像アップロード箇所

お手元の画像をアップロードすると、次のようにコメントの下部に表示される仕組みです。

画像がアップロードされた例

今回は最低限の仕様で実装しましたが、実際に画像アップロード機能を導入するとなると、次のような点も考慮する必要が出てきます。

  • スパム投稿やBot対策
  • 複数画像への対応
  • アップロード画像の管理
  • セキュリティ対策

ただ、これらすべてを自作するのは、それ相応の知識や工数が必要になってきます。

REHUBの画像アップロード機能

ここからは手前味噌になってしまいますが、クチコミレビューサイトがつくれるWordPressテーマ「REHUB」の画像アップロード機能についてご紹介いたします。

REHUBのバージョン4.0以降からは、レビュー記事内のクチコミ投稿フォームで、画像をアップロードできるようになりました。

基本仕様は、次のとおりです。

  • 画像を複数枚アップロードできる
  • 投稿された画像はクリックで拡大表示できる
  • セキュリティ対策もあらかじめ実装済み

すでにREHUBをお使いの方は、 バージョンを4.0以降にアップデートするだけで、利用可能です。

基本的な使い方

使い方はかんたんで、TCDテーマ > オーベルジュ > クチコミ投稿フォームに追加されている「添付画像フィールド」にチェックを入れるだけです。

REHUBの添付画像フィールド設定箇所

ラベルや補足説明を登録すれば、サイト上には次のように表示されます。

これでクチコミ投稿と同時に画像をアップロードできるようになります。1つのクチコミにつき、最大6枚までアップロード可能です。

たとえば、3枚の写真と共に投稿すれば、こんな風に表示されます。

画像は、クリックすると拡大表示される仕組みになっていますので、他のユーザーさんもしっかりと写真をご覧いただけます。

クチコミの画像をクリックすると拡大表示される

セキュリティ対策

以下のようなセキュリティ対策もあらかじめ施してあります。

対策内容 概要
nonce認証 正規の画面から送信されたかどうかを検証し、不正な直接アクセスを防止
ハニーポット ユーザーには見えない入力欄を設置し、Botによる自動投稿を判別してブロック
短時間送信の制限 フォーム表示直後(数秒以内)の投稿を制限し、機械的なスパム送信を防止

一般的なスパムコメントやBot投稿を想定した、ベースラインとして十分現実的な対策です。

REHUBをお使いの方は、ぜひ安心して画像アップロード機能をご活用ください。

まとめ

WordPressのコメントフォームに、画像アップロード機能を実装する方法をご紹介しました。

本記事で紹介した方法で実装できるのは、以下のシンプルな仕組みです。あくまで仕組み理解を目的とした、最小構成の実装になります。

  • コメントと一緒に画像を1枚投稿できる
  • 画像はWordPressのアップロードディレクトリに保存される
  • 保存した画像をコメント下に表示できる

これらに加えて、より本格的な仕組みを実装するには、それなりの知識や工数が必要になってきます。

クチコミサイトなどで、複数画像のアップロードやスパム対策まで含めて運用したい場合は、REHUBのようなテーマを活用するのも、ひとつの選択肢です。

REHUBのスマホモックアップ

WordPressテーマ「REHUB」