WordPressには
- 投稿に対していろいろな人からの意見や感想が書ける
- その意見や感想に対して返信できる
- 条件の設定によってログインユーザーだけ、必要な事項を入力した人だけなど投稿できる人を限定できる
- 条件を満たす人は新たに追加することができる
- ブラックリスト、ブラックフレーズによって不適切な投稿を抑止することができる
など、掲示板プラグインで行うようなコメント機能が最初から備わっています。
でもコメント欄の表示は通常サイト内で共通のものしか設置されていないため、日記などに対しては「コメントする」で良くてもその他の場合には別の案内を加えたい場合などにはちょっと使いにくいですよね?
まずはこのサイトでサンプルを用意したので見てみてください。
の記事の下にあるコメント欄が通常のコメント欄、
の記事の下にあるコメント欄がコメント欄とは別のコメント欄!?です。
同じサイト内にあるコメント欄なのに前者は単純にコメントを募るもの、後者は同じ仕組みでも注意書きなどが加わったものになってますよね?
前者は通常の投稿、後者はカスタム投稿タイプを使って作っている記事という構造になっています。このように特定のカスタム投稿タイプで別の表現をするコメント欄が設置できれば、特別なプラグインなどを使わなくても掲示板のような機能を持たせることができるんです。
実は私もコメント欄って掲示板の代わりとして十分に使えるのでは?と思いつつ、こうやって切り分ける方法が分からず、また分ける方法もネット上に見つからず・・でやっぱり掲示板は掲示板系プラグインを使用するしかないのか?とあきらめていました。
が今回紹介する方法で問題解決!これでまたサイト作りの幅が広がりそうです。
案外簡単にカスタム投稿タイプごとに別のコメント欄を表示する方法が分かりましたので、備忘録を兼ね紹介しておきます。
※このサイトは基本的にコメント欄を設けないことにしていますので、記事閲覧時には↑のサンプルの機能を停止している場合がありますので↓へそれぞれの画像を残しておきます。
【通常の投稿に表示するコメント欄】
【特定のカスタム投稿タイプの記事で表示するコメント欄】
コメント(カスタム投稿タイプ用のcomments.php)を作る
FTPクライアントツールなどを使ってサイトで有効になっているテーマフォルダを開くと「comments.php」というファイルがありますのでパソコンへ一旦ダウンロードします。
- テーマ独自のcomment.phpがない場合には文末の「comment.phpがないときは」を参照ください
- テーマによってはcomments.phpから別のテーマファイルを呼び出している複雑なものもありますので、ご自身の環境に合わせて構造の理解をしないとサイトを壊してしまう可能性があります
ダウンロードしたらファイル名を任意のものへ変更します(例:comment-custom.phpなど)
それを再びテーマフォルダ内へアップロードします
カスタマイズしてからでもいいのですが、WordPressの管理画面から行った方がコードが間違っているときにコードチェックが働いてくれて便利です(WordPressのバージョン4.9以降のみ)。古いバージョンを使っている場合はエラー発生時最悪画面真っ白状態となってしまうことがありますのでおすすめしません。加工してからアップロードするようにしてください。
管理画面から「外観」→「テーマエディタ」を開き、右のリンク一覧からアップロードしたファイルを選択します。
文字列の変更はテーマによってコードの書き方が違いますので
を参考にどんな構造になっているのか?を確認しつつオリジナルにしていってください。
テーマのcomments.phpによっては全く違う書き方がされている場合もありますのでよく確認するようにしてください。
コメントの出力用コードを変更する
テーマの個別投稿(single.php)には以下のようなコメント欄を表示するコードが入っています。
<?php comments_template(); ?>
テーマによってはいろいろなところから部品を読みだすようになっているものもありますので、そんなときにはファイルを辿って発見してください。
<?php if(is_singular('カスタム投稿タイプのスラグ')): ?>
<?php comments_template('/カスタム投稿タイプで使うコメントファイル.php'); ?>
<?php else: ?>
<?php comments_template(); ?>
<?php endif; ?>
コードについて少々解説すると・・・
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がない場合には
STINGER7:コメント欄をカスタマイズする方法【シンプル掲示板風】
を参考に独自のコメント機能が有効になるようにしてください。
また、独自のコメント欄で使える条件や内容については
を参照して設定してください。
さいごに
いかがでしたか??私と同じようなこと考えてた方、多分「へぇ~こんな簡単にできるんだ」と思われたことでしょう。
今回はカスタム投稿タイプで分けましたが、条件分岐できる条件はいろいろありますので、カテゴリーとかタグとかいろいろな形で分けられそうです。
ひょっとするとこんなの記事にして偉そうに紹介するものでもないのかも知れませんね。でも私的にはコメント欄を実際に切り替えて運営しているWordPressサイトには出会ったことがないので、多分最初からコメント欄は1つと決めつけてる人が多いんじゃないかと思ってます。
何度も書いていますが、comments.phpはテーマによって書き方が結構異なるので、すべてのテーマで使えるという方法ではありませんから、できそうだったらチャレンジしてみてください。
最後に、この方法で条件分岐した場合、コメント関係のプラグインがきちんと動作するかは不明ですのでテストを行ってから実装するようにしてくださいね。