ワードプレスを運営していると、コメント欄をカスタマイズしたくなる時ってありますよね。
こんな風に
- コメント欄にページネーションをつけたい
- 新しいコメントを先頭にソートして表示させたい
ただそれだけなのに、結構はまってしまい2日くらい悩んだので備忘録として。
*テンプレートはCocoonで、子テーマを使用しています
ワードプレスのコメント欄をカスタマイズする
こちらのサイト様のおかげで希望通りの実装ができました。
WordPressのコメント欄を新着順(降順)にしてページ分割をおこなう方法
他にもいろんなサイトを見てワードプレスのコメントページ送りについて調べたのですが、
私のWPに対する知識が乏しすぎて自サイトに活かすことができず・・・上記サイト様の解説がどんぴしゃでした!本当にありがとうございます。
ある程度理解できてからリファレンスを見てみると、こちらもとても有意でした。
関数リファレンス/get comments
テンプレートタグ/wp list comments
関数リファレンス/paginate comments links
「設定」の設定
まず、ダッシュボードの「設定」から「ディスカッション」を選択。
「他のコメント設定」の項にて
にセット。
コメントの並びを日付の新しい順にし、その新しいページをデフォルトで表示する、という設定です。
例えばコメントが5ページに渡っていたら5ページ目をデフォルトで表示させる。ということ。
ディスカッションでの設定はその2箇所になります。
comments.phpを開く
ダッシュボードの「外観」から「テーマの編集」を選んで、comments.phpを開きます。
・直接編集するといざというとき戻せなくなるので、ローカルにコピーしてからテキストエディタなどで編集することをおすすめします。
コメントを取得
いよいよcomments.phpを修正してゆきます。
$comments = get_comments( array( 'status' => 'approve', 'post_id' => $post->ID ) );
まず get_comments() でコメントを取得して変数$commentsへ代入。
その際にパラメーターを渡して
- 承認済みのコメント
- 指定したポスト(id)に対するコメント
のみに絞ります。
コメント一覧を表示
次にテンプレートダグである wp_list_comments() を使ってコメント一覧をタグ付きで表示させます。
wp_list_comments( array( 'per_page' => 20, 'reverse_top_level' => false ), $comments );
パラメーターで1ページあたりの表示数と、コメントを古い順か新しい順かを設定。
配列と、先ほど取得したコメントを入れてる$commentsも渡します。
コメントは1ページにつき20件表示されつつ、ページネーションは10件表示の計算に基づいて算出されてしまいました。どちらもきちんと設定した方が良いようです・・・
ページネーション表示
<?php if(get_comment_pages_count() > 1){ echo '<div class="myPage">'; paginate_comments_links(); echo '</div>'; } endif; ?>
最後はページネーションの表示。
もしコメントが1ページ以上あったら、というif文でくくって、paginate_comments_links()でページネーションをタグも含めて出力させます。
これで、ページネーションは希望どおりの挙動になりました!
コメント取得〜ページネーションのコード
まとめるとこんなコードになります。
<ol class="commets-list"> <?php $comments = get_comments( array( 'status' => 'approve', 'post_id' => $post->ID ) ); wp_list_comments( array( 'per_page' => 20, 'reverse_top_level' => false ), $comments ); ?> </ol> //ここまでがコメント取得&出力 //ここからページネーション <?php if(get_comment_pages_count() > 1){ echo '<div class="myPage">'; paginate_comments_links(); echo '</div>'; } endif; ?>
これはコメント一覧表示とページネーションに関する部分のコードです。フォーム表示は含まれていませんので適宜環境に合わせてフォームを置いてください。
コメント投稿後の遷移先を変える
無事にできたと思いきや、一難去ってまた一難。
コメントのテスト投稿をしてみたところ、なんだかおかしなことになりました。
カスタマイズ前は投稿したコメントIDのパーマリンクがついたURLでページが遷移して、投稿したコメントが表示されていたのですが
カスタマイズ後はなぜか一番最後のページ(現状だと一番古いコメントのページ)に遷移してしまいます。
最新が表示されるコメントトップに遷移してもらいたいので、いじりたくなかったfunction.phpを触ることに。
add_filter('comment_post_redirect', 'comment_redirect'); function comment_redirect(){ wp_redirect('http://任意のアドレス'); exit(); }
【WordPress】記事へのコメントを送信した後にサンクスページを表示させる方法
こちらのサイト様を参考に上記コードをfunction.phpに追加したら、無事にコメントトップへ遷移させることができました。
comment_post_redirect()という関数が発動したらcomment_redirect()という関数の挙動にスイッチする。
そのcomment_redirect()の遷移先はwp_redirect(‘http://任意のアドレス’)だよ〜
という内容になります。
遷移先のURLにつけるパラメーターを修正すればもっとスマートかな?とも考えたのですが、wp-comments-post.phpの内容がハードル高かったので諦めました。
いつかリベンジするぞ!!