【WordPress】カスタム投稿タイプごとにコメント欄を切り替える変える方法

公開日: 使い方など
Knowledge Base Wordpress パソコン カスタマイズ 設定

WordPressには

  • 投稿に対していろいろな人からの意見や感想が書ける
  • その意見や感想に対して返信できる
  • 条件の設定によってログインユーザーだけ、必要な事項を入力した人だけなど投稿できる人を限定できる
  • 条件を満たす人は新たに追加することができる
  • ブラックリスト、ブラックフレーズによって不適切な投稿を抑止することができる

など、掲示板プラグインで行うようなコメント機能が最初から備わっています。

でもコメント欄の表示は通常サイト内で共通のものしか設置されていないため、日記などに対しては「コメントする」で良くてもその他の場合には別の案内を加えたい場合などにはちょっと使いにくいですよね?

まずはこのサイトでサンプルを用意したので見てみてください。

の記事の下にあるコメント欄が通常のコメント欄、
の記事の下にあるコメント欄がコメント欄とは別のコメント欄!?です。

同じサイト内にあるコメント欄なのに前者は単純にコメントを募るもの、後者は同じ仕組みでも注意書きなどが加わったものになってますよね?

前者は通常の投稿、後者はカスタム投稿タイプを使って作っている記事という構造になっています。このように特定のカスタム投稿タイプで別の表現をするコメント欄が設置できれば、特別なプラグインなどを使わなくても掲示板のような機能を持たせることができるんです。

実は私もコメント欄って掲示板の代わりとして十分に使えるのでは?と思いつつ、こうやって切り分ける方法が分からず、また分ける方法もネット上に見つからず・・でやっぱり掲示板は掲示板系プラグインを使用するしかないのか?とあきらめていました。

が今回紹介する方法で問題解決!これでまたサイト作りの幅が広がりそうです。

案外簡単にカスタム投稿タイプごとに別のコメント欄を表示する方法が分かりましたので、備忘録を兼ね紹介しておきます。

※このサイトは基本的にコメント欄を設けないことにしていますので、記事閲覧時には↑のサンプルの機能を停止している場合がありますので↓へそれぞれの画像を残しておきます。
【通常の投稿に表示するコメント欄】
【WordPress】カスタム投稿タイプごとにコメント欄を切り替える変える方法
【特定のカスタム投稿タイプの記事で表示するコメント欄】
【WordPress】カスタム投稿タイプごとにコメント欄を切り替える変える方法

コメント(カスタム投稿タイプ用のcomments.php)を作る

FTPクライアントツールなどを使ってサイトで有効になっているテーマフォルダを開くと「comments.php」というファイルがありますのでパソコンへ一旦ダウンロードします。

※テーマ独自のcomment.phpがない場合には文末の「comment.phpがないときは」を参照ください
※テーマによってはcomments.phpから別のテーマファイルを呼び出している複雑なものもありますので、ご自身の環境に合わせて構造の理解をしないとサイトを壊してしまう可能性があります

ダウンロードしたらファイル名を任意のものへ変更します(例:comment-custom.phpなど)

それを再びテーマフォルダ内へアップロードします

※カスタマイズしてからでもいいのですが、Wordpressの管理画面から行った方がコードが間違っているときにコードチェックが働いてくれて便利です(Wordpressのバージョン4.9以降のみ)。古いバージョンを使っている場合はエラー発生時最悪画面真っ白状態となってしまうことがありますのでおすすめしません。加工してからアップロードするようにしてください。

管理画面から外観テーマエディタを開き、右のリンク一覧からアップロードしたファイルを選択します。

文字列の変更はテーマによってコードの書き方が違いますので

を参考にどんな構造になっているのか?を確認しつつオリジナルにしていってください。

※テーマのcomments.phpによっては全く違う書き方がされている場合もありますのでよく確認するようにしてください。

【ha-Basic】テーマをお使いの方

【ha-Basic】テーマを使っていただいている方は、新しく作ったコメントファイルの中へ以下のコードをコピペすれば↑のサンプルと同じになりますので、その後文字列を変更いただければ大丈夫です。

コードを表示する
<div id="comments">
     <?php
     if ( have_comments() ):
          ?>
	<h5 id="resp"><i class="fa fa-commenting"></i>&nbsp;comment</h5>
          <ul class="commets-list">
               <?php wp_list_comments( 'callback=costom_comment' ); ?>
          </ul>
          <?php
     endif;
     $args = array(
	'title_reply' => 'プラグインを使用した感想',
	'comment_notes_before' => '他の方の参考になるよう記事の感想やプラグインの使用感などをお寄せください(プラグインの使い方やカスタマイズ方法についてのコメントは受け付けていませんので送信いただいても返信は致しません)',
	'comment_notes_after' => '名前・メールアドレスは必須入力項目ですが、メールアドレスは公開されません。また、メールアドレスはコメントに対する通知等に使用する以外の用途には使用しませんので安心して入力ください。※記事に相応しくないと思われるものは公開しない場合がありますのでご了承の上投稿ください',
	'fields' => array(
	    'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
                    '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',
'email'  => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
	            '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',
            'url'    => '',
            ),
	'label_submit' => __( '感想を送信' ),
     );
     comment_form( $args );
     ?>
</div>
<?php
if( $wp_query -> max_num_comment_pages > 1 ):
?>
<div class="st-pagelink">
<?php
$args = array(
'prev_text' => '&laquo; Prev',
'next_text' => 'Next &raquo;',
);
paginate_comments_links($args);
?>
</div>
<?php
endif;
?>
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. コードは合っているはずなのに更新できないときは
  6. 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、Wordpressのエディタチェックではこれを「’」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
  7. 「何かが間違っています...」と表示され、更新できないときは
  8. このエラーは本当に何がエラーなのかをWordpressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
    ※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
これらのエラー対処については以下のページが参考になるかも知れません

コードを転載する場合には

ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします

せっかく復活したのに・・・「CS SHOP」プラグインのAmazon商品のみ文字化け発生!!

これだけはできるようになっておきたいWordPressカスタマイズ前の知識

画像の一括アップロード時に時々httpエラーが出るのは?改善できる?


コメントの出力用コードを変更する

テーマの個別投稿(single.php)には以下のようなコメント欄を表示するコードが入っています。

<?php comments_template(); ?>
※テーマによってはいろいろなところから部品を読みだすようになっているものもありますので、そんなときにはファイルを辿って発見してください。

<?php if(is_singular('カスタム投稿タイプのスラグ')): ?>
<?php comments_template('/カスタム投稿タイプで使うコメントファイル.php'); ?>
<?php else: ?>
<?php comments_template(); ?>
<?php endif; ?>
【注意】コードをコピーして使用する前に必ずお読みください

この記事内にコードが記載されている場合、コードはそのままコピー(いわゆるコピペ)してお使いいただいても構いませんが、以下の件にご留意ください。

使用については自己責任でお願いします

コードの確認は私の管理するサイト、またはテスト環境で問題が起こらなかったものですので、お使いの環境での動作等を保証するものではありません。

万が一このコードを使用してサイトに重篤なトラブルが生じても当サイト、当サイト管理者は一切責任を負いません

コードの変換エラーなどにより動作しない場合、更新エラーが出る場合があります

コードをそのままコピーしても問題なく使えるよう文字列変換を行った上で掲載しておりますが、希に変換できていない場合があり、コードエラーとなることがあります

その場合には以下の方法で修正を行ってみてください

  1. コードの中に全角の記号が入っていませんか?
  2. 半角にすることで解消できます
  3. コードの中に全角の空白(スペース)がありませんか?
  4. 半角にすることで解決できます
  5. コードは合っているはずなのに更新できないときは
  6. 特にエラーの出た行内に日本語での文字列が入っている場合には全角での文字列があるということでエラーになる場合があり、Wordpressのエディタチェックではこれを「’」や「)」など閉じ子のエラーとして認識され更新できないことがあります。エラーとして返される行の先頭に空白がある場合には空白をなくすことできちんと認識され更新されるようになることが多いです。
  7. 「何かが間違っています...」と表示され、更新できないときは
  8. このエラーは本当に何がエラーなのかをWordpressのチェックが判断できない場合に発生します。解決策としてはその画面を開き直すことなのですが、その際希に元のコードがすべて削除されてしまう場合がありますので、今表示されているコードを一旦どこかへコピーしてからページの再読み込みをするようにしてやり直します。
    ※このエラーは不明なエラーなので予期せぬ動きをする可能性がありますので特に慎重な対処が必要です
これらのエラー対処については以下のページが参考になるかも知れません

コードを転載する場合には

ご自身のサイトで当ページで紹介しているコードを転載される場合には当ページへのリンクを入れていただきますようお願いいたします

コードについて少々解説すると・・・
1行目・・・カスタム投稿タイプのスラグが一致したらという条件分岐です。
2行目・・・1行目の条件に一致したときに表示するコメントフォームのファイルを指定します
3行目・・・条件に一致しなかったらという記述です
4行目・・・1行目の条件以外の場合に表示するコメントフォームのファイルを指定します(もともとのコードです)
5行目・・・条件分岐の終了を表すコードです
こんな流れになっています。

また複数のカスタム投稿タイプで切り分けた後、最終的に通常のコメント欄を表示するには

<?php if(is_singular('カスタム投稿タイプ1')): ?>
<?php comments_template('/カスタム投稿タイプ1用のコメントファイル'); ?>
<?php elseif(is_singular('カスタム投稿タイプ2')): ?>
<?php comments_template('/カスタム投稿タイプ2用のコメントファイル'); ?>
<?php else: ?>
<?php comments_template(); ?>
<?php endif; ?>
という風に、途中に
<?php elseif(is_singular('カスタム投稿タイプ2')): ?>
<?php comments_template('/カスタム投稿タイプ2用のコメントファイル'); ?>
という、「もしもそうじゃなかったら・・・」という処理業を追加していき、最終的に
<?php else: ?>
<?php comments_template(); ?>
<?php endif; ?>
とすることで、指定されていない投稿タイプのときには通常のコメントを表示するようにします。

ちょっと邪道な方法ですが、phpの条件文は当てはまらないときには何もしないので、使用するカスタム投稿タイプが決まっているなら↑のブロックをすべての投稿タイプについて作成し、最後に通常の投稿に対するコメント欄の表示を指定すればOKです。

例:

<?php if(is_singular('カスタム投稿タイプのスラグ')): ?>
<?php comments_template('/カスタム投稿タイプで使うコメントファイル.php'); ?>
<?php endif; ?>
<?php if(is_singular('post')): ?>
<?php comments_template(); ?>
<?php endif; ?>

ただしこの方法だと、条件にないカスタム投稿タイプにはコメント欄が表示されなくなってしまうので通常の条件文の方が無難だと思います。

複数のカスタム投稿タイプに対して同じコメント欄を使う場合は

上の例は1つのカスタム投稿タイプに対して1つのコメント欄がある場合の書き方ですが、中には複数のカスタム投稿タイプで同じコメント欄を使う場合もあるでしょう。そんなときには冒頭の条件文を以下のようにします

<?php if(is_singular(array('カスタム投稿タイプのスラグ','カスタム投稿タイプのスラグ'))): ?>
要するに「array()」で囲んで「含む」とするだけです。

comments.phpがないときは

テーマによってはcomments.phpがなく、Wordpress標準のコメントシステムを呼び出すのみになっているものがあります。Wordpressの公式サイトから入手できるテーマではcomments.phpの設置はWordpressテーマの必須要件となっており、基本的にファイルがないものは配布できないようになっていますので、公式サイトではないところで配布、販売されているテーマで見受けられることがあります。

もしも使っているテーマにcomments.phpがない場合には

を参考に独自のコメント機能が有効になるようにしてください。

また、独自のコメント欄で使える条件や内容については

を参照して設定してください。

さいごに

いかがでしたか??私と同じようなこと考えてた方、多分「へぇ~こんな簡単にできるんだ」と思われたことでしょう。

今回はカスタム投稿タイプで分けましたが、条件分岐できる条件はいろいろありますので、カテゴリーとかタグとかいろいろな形で分けられそうです。

ひょっとするとこんなの記事にして偉そうに紹介するものでもないのかも知れませんね。でも私的にはコメント欄を実際に切り替えて運営しているWordpressサイトには出会ったことがないので、多分最初からコメント欄は1つと決めつけてる人が多いんじゃないかと思ってます。

何度も書いていますが、comments.phpはテーマによって書き方が結構異なるので、すべてのテーマで使えるという方法ではありませんから、できそうだったらチャレンジしてみてください。

最後に、この方法で条件分岐した場合、コメント関係のプラグインがきちんと動作するかは不明ですのでテストを行ってから実装するようにしてくださいね。

ひまあーと(管理人)
  • 記事の作者: ひまあーと(管理人)

  • ☆最後までお読みいただきありがとうございました。記事作者のひまあーとです。
    ☆Wordpressでサイトをカスタマイズしていく上で有用な情報を配信しつつ、「ココナラ」でサイトカスタマイズのお手伝い、不具合の修復、サイト引っ越し代行などをさせていただいております。
    ☆Wordpressネタが多いですが、趣味の「園芸」「卓球」などの情報や日々の出来事などもどんどん増やしていきますのでよろしくお願いいたします。


いつでもご相談・サイトカスタマイズの依頼を受け付けています

Wordpressのカスタマイズ、不具合解消のご相談はすべてココナラのダイレクトメッセージからお受けしております。まずはこちらのバナーからお気軽にお問い合わせください。

※一度もココナラを使ったことがない方はココナラへの無料登録が必要です。こちらから登録後、上のリンクをクリックする、またはココナラトップページから「ひまあーと」を検索してお問い合わせください。


【スポンサーリンク】


記事の拡散にご協力をお願いします

閲覧いただきありがとうございました。役に立つ情報でしたら是非SNSでシェアをお願いします

関連情報