ホテル・結婚式場などのホームページがつくれるエレガントなデザインのテンプレート「CANON」

ワードプレステーマ別

TCDテーマREHUB:クチコミのスターレビューの入力必須を解除する方法

WordPressテーマ「NULL」

TCD LABOはWordPressテーマ「NULL」を使用して作られています。

ダウンロード

Q.クチコミのレビュー点を必須入力ではなく任意にできますか?

▼変更箇所イメージ(画像はWindowsの例)

A.下記の方法でカスタマイズすれば可能です(※ただし注意点あり)。

REHUBテーマの「クチコミ」機能は、WordPress標準で備わっている「コメント」機能を使用しています。
また、クチコミの入力フォームでは、デフォルトですべての項目が入力必須となっています。

  • ニックネーム
  • スターレビュー(レビュー点数)
  • クチコミのタイトル
  • クチコミ内容
備考ニックネーム」については、WordPressの「ディスカッション」設定で変更が可能です。
「設定」>「ディスカッション」>「コメントの投稿者の名前とメールアドレスの入力を必須にする」のチェックを外す

「スターレビュー」と「クチコミのタイトル」については、REHUBテーマの独自の項目になりますが、これらは次のカスタマイズで任意入力に変更が可能です。

1. スターレビュー

編集するファイル: functions/review/review-form.php
編集する箇所1: 106行目付近

省略)~<span class="p-review-comments__item-required"><?php _e( 'Required', 'tcd-rehub' ); ?></span>~(省略

↓変更

省略)~<span class="p-review-comments__item-any"><?php _e( 'Any', 'tcd-rehub' ); ?></span>~(省略

編集する箇所2: 117行目付近

省略)~ <?php if( $i == 1 ) echo 'required="required"'; ?>>

↓削除

省略)~ >

【応用編】一部だけ任意にしたい

一部のレビュー項目だけ任意入力にするためには、ループ中で●番目かどうかを判別して対応します。
また、点数の計算箇所において、未入力の場合に計算から除外する必要があります。

編集するファイル(1): functions/review/review-form.php
編集する箇所: 98~133行目付近を以下に差し替え

<div class="p-review-comments__item comment-form-rating">
    <ul class="p-review-comments__rating-list">
<?php
    $counter = 0; // カウンター初期化
    $optional_items = [3, 5]; // 任意項目とする項目番号リスト。ここでは3番目と5番目を指定
    foreach ($ratings as $key => $value) {
        $counter++; // カウンターをインクリメント
?>
        <li class="p-review-comments__rating-item">
            <p class="p-review-comments__rating-item__headline u-flex-align-center"><?php echo wp_kses_post($value['label']); ?>
            <?php if (in_array($counter, $optional_items)): ?>
                    <span class="p-review-comments__item-any"><?php _e('Any', 'tcd-rehub'); ?></span>
                <?php else: ?>
                    <span class="p-review-comments__item-required"><?php _e('Required', 'tcd-rehub'); ?></span>
                <?php endif; ?>
            </p>
            <div class="p-review-comments__rating-item__stars u-flex-align-center">
                <span class="p-review-comments__rating-item__stars-label"><?php _e('Please select the number of stars', 'tcd-rehub'); ?></span>
                <div class="p-review-comments__rating-item__stars-value u-flex">
<?php for ($i = 1; $i <= 5; $i++) {
    $id = $key . '-' . $i;
?>
                    <input id="<?php echo $id; ?>" class="p-review-comments__rating-item__stars-input<?php if (in_array($counter, $optional_items)) echo ' p-review-comments__rating-item__stars-input-any'; ?>" type="radio" name="rating[<?php echo $key; ?>]" value="<?php echo $i; ?>"<?php if ($i == 1 && !in_array($counter, $optional_items)) echo ' required="required"'; ?>>
                    <label class="p-review-comments__rating-item__stars-icon c-icon js-star-rating" for="<?php echo $id; ?>">&#xe838;</label>
<?php } ?>
                </div>
            </div>
        </li>
<?php } ?>
    </ul>
</div>

編集するファイル(2): functions/review/review.php
編集する箇所: 12行目付近

▼12行目付近

$ratings = get_comment_meta( $comment->comment_ID, 'rating', true ) ? get_comment_meta( $comment->comment_ID, 'rating', true ) : '';

↓↓↓

$ratings = get_comment_meta( $comment->comment_ID, 'rating', true ) ? get_comment_meta( $comment->comment_ID, 'rating', true ) : '';
$filtered_ratings = array_filter($ratings, function($value) { return $value !== ''; });
$filtered_ratings = empty($filtered_ratings) ? [1] : $filtered_ratings;

▼29行目(元々27行目)付近

<input class="regular-text" type="number" value="<?php echo round(  array_sum( $ratings ) / count( $ratings ), 2 ); ?>" readonly />

↓↓↓

<input class="regular-text" type="number" value="<?php echo round(  array_sum( $ratings ) / count( $filtered_ratings ), 2 ); ?>" readonly />

編集するファイル(3): functions/review/comment-save.php
編集する箇所: 38行目付近

$filterd_rating = number_format( array_sum( $filterd_rating ) / count( $filterd_rating ) * 100, 0 );

↓↓↓

if (count($filterd_rating) > 0) {
  $filterd_rating = number_format( array_sum( $filterd_rating ) / count( $filterd_rating ) * 100, 0 );
} else {
  $filterd_rating = 0;
}

編集するファイル(4): functions/review/review-function.php
編集する箇所: 46行目付近

$total_ratings = array_intersect_key( $single_review_ratings, $rating_items );

↓↓↓

$total_ratings = array_filter($single_review_ratings, function($value) {
	return $value > 0;
});
$total_ratings = array_intersect_key( $total_ratings, $rating_items );

編集するファイル(5): functions/review/comment-loop.php
編集する箇所: 20行目、104行目付近
※内容同じ

$total_ratings = array_intersect_key( $single_review_ratings, $rating_items );

↓↓↓

$filtered_ratings = array_filter($single_review_ratings, function($value) {
	return !empty($value) && $value > 0;
});
$total_ratings = array_intersect_key( $filtered_ratings, $rating_items );

2. クチコミのタイトル

編集するファイル: functions/review/review-form.php
編集する箇所: 149-150行目付近

省略)~<span class="p-review-comments__item-required"><?php _e( 'Required', 'tcd-rehub' ); ?></span>~(省略
省略)~value="" required="required" placeholder=~(省略

↓変更

省略)~<span class="p-review-comments__item-required"><?php _e( 'Required', 'tcd-rehub' ); ?></span>~(省略
省略)~value="" placeholder=~(省略

▼変更後のイメージ
スターレビューとクチコミのタイトルが任意入力に変化します。

送信に成功します。

承認後、未入力のまま追加されます。

3. 【発展編】クチコミ内容

クチコミ内容は、WordPressのコメント機能のデフォルト仕様により、未入力はエラーになります。
そこで、次のフィルターフックを追加することで、これを解除することができます。

編集するファイル: functions.php
編集する箇所: 末尾に追記

add_filter('allow_empty_comment', '__return_true');

注意点

入力必須を解除した場合、いくつか運用上の注意点が生じると思われますのでご注意ください。

  • 「ニックネーム」を任意に変更した場合は「匿名」として投稿されます。
  • スターレビューをつけずに投稿した場合、クチコミの投稿数は増えますが、レビュー点には影響しません(平均の母数は増えません)。
  • WordPressの仕様で、まったく同じ内容のクチコミ内容はエラーになります。そのため、「ニックネーム」「クチコミ内容」の組み合わせが重複して、投稿できなくなる可能性が高まります

参考

【WordPress Developer Resources】allow_empty_comment

この記事は役に立ちましたか?

もし参考になりましたら、下のボタンで教えてください。
今後の記事作成の参考とさせて頂きます!

同じテーマのカスタマイズ記事