• aboutabout
  • servicesservices
  • worksworks
  • mediamedia
  • contactcontact
  • homeサイトトップ
  • about会社概要
  • services業務内容
  • works実績紹介
  • mediaメディア
  • contactお問い合わせ
ja/

media

メディア

  1. サイトトップ
  2. メディア
  3. プログラミングの記事
  4. WordPressのコメントリストとコメントフォームを実装してカスタマイズする

WordPressのコメントリストとコメントフォームを実装してカスタマイズする

  • 2018.01.07
  • プログラミング
  • WordPress
Updated: 2018.01.07
先日WordPressサイトにコメントフォームを実装する機会があったので備忘録として残しておきます。WordPressにはデフォルトでコメントが投稿できるフォームと投稿したコメントを表示するリスト機能が用意されています。ただし、そのまま使うのではなくカスタマイズしたい時もあるかと思います。そんな場合に実装する方法になります。  
WordPressのコメント機能の構成と概要
先ほど説明した通り、WordPressのコメントは大きく分けて「投稿コメントを表示させるリスト部分」と「コメント内容を投稿するフォーム」の2つで構成されています。   そして、これらのコメント機能もコードで出力しますが、ヘッダーやフッターと同じくテンプレート化させることでメンテナンスもしやすくなります。コメントテンプレートのファイルは「comments.php」という形で決まっており、そのテンプレートファイルを呼び出す関数も「comments_template()」用意されているのでそれを使います。あとはソースコードを実装していくだけでコメント機能がサイトに実装できます。  
コメント機能自体のソースコードが書かれたcomments.phpを作成
まずはコメントリストとコメントフォームを出力するためのコードをテンプレートファイルである「comments.php」という形で作成します。 コメントリスト自体は「wp_list_comments()」、コメントフォーム自体は「comment_form()」という関数で出力できるので必要最小限の要件であればこれで完結します。ただし今回はコメント件数などの表示といったカスタマイズを加えていくので、サンプルとして下記のコードを記述します。 【comments.php】
<?php
  if (post_password_required()) {
     return;
   }
?>
<!-- comments start -->
<div class="comments-area">
   <?php if (have_comments()) :?>
   <h3 class="comments-count"><?php echo get_comments_number().' 件のコメント'; ?></h3>
   <!-- comments-list start -->
   <ul class="comments-list">
     <?php wp_list_comments(array(
       'avatar_size'=>48,
       'style'=>'ul',
       'type'=>'comment',
       'callback'=>'mytheme_comments'
      )); ?>
   </ul>
   <?php if (get_comment_pages_count() > 1) : ?>
   <ul class="comments-nav">
     <li class="comments-prev"><?php previous_comments_link('<< 前のコメント'); ?></li>
     <li class="comments-next"><?php next_comments_link('次のコメント >>'); ?></li>
   </ul>
   <?php endif; ?>
  <?php endif; ?>
  <!-- comments-list end -->
  <!-- comments-form start -->
  <?php
     $comments_args = array(
       'fields' => array(
       'author' => '<p class="comments-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="comments-required">*</span>' : '' ) . '</label>' .'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '"></p>',
       'email' => '<p class="comments-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="comments-required">*</span>' : '' ) . '</label> ' .'<input id="email" name="email" type="email"' . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '"></p>'
     ),
     'title_reply' => 'コメントはこちらから',
     'comment_notes_before' => '<p class="comments-notes">メールアドレスは公開されませんのでご安心ください。また、<span class="comments-required">*</span> が付いている欄は必須項目となります。</p>',
     'comment_notes_after' => '<p class="comments-form-allowed-tags">内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。</p>',
     'label_submit' => 'コメントを送信する',
   );
   comment_form($comments_args);
  ?>
  <!-- comments-form end -->
</div>
<!-- comments end -->
  コメントリストである関数の「wp_list_comments()」の引数でコールバック関数を指定していますが、これは後述で説明していくfunctions.phpでカスタマイズを行います。   コメントフォームである関数の「comment_form()」でもやはり引数で出力するフォーム項目を指定しています。今回は投稿者名とメールアドレスといった必要最小限にしています。コメント本文のテキストエリアとコメント送信ボタンはデフォルトで出力されます。上記コードでは合わせてコメント投稿時の案内テキストなども出力しています。  
comments.phpをsingle.php内へインクルードさせる
コメント出力のコードが記述されたテンプレートファイルcomments.phpは投稿の詳細ページであるsingle.php内の投稿ループ内に入れる必要がありますが、テンプレートファイルとして扱うのでインクルードさせる「<?php comments_template(); ?>」のコードを該当箇所に追記します。 【single.php】※一部抜粋
<!-- 投稿ループ開始 -->
<?php if(have_posts()) : while(have_posts()) : the_post(); ?>

  <h1><?php the_title(); ?><!-- 記事タイトル -->
  </h1>
  <div><?php the_content(); ?><!-- 記事本文-->
  </div>

  <!-- コメントテンプレート呼び出し -->
  <?php comments_template(); ?>

<?php endwhile; endif; ?>
<!-- 投稿ループ終了 -->
 
functions.phpにコメントリスト表示のカスタマイズを行う関数を記述
comments.phpに記述している「wp_list_comments()」で引数にコールバック関数を指定しています。「functions.php」へこのコールバック関数を記述します。 【functions.php】
function mytheme_comments($comment, $args, $depth){
   $GLOBALS['comment'] = $comment; ?>
   <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
     <div id="comment-<?php comment_ID(); ?>" class="comments-wrapper">
       <div class="comments-meta">
       <?php echo get_avatar( $comment, $args['avatar_size']) ?>
         <ul class="comments-meta-list">
           <li class="comments-author-name">
           <?php printf('<cite class="fn">%s</cite>', get_comment_author_link()) ?>
           </li>
           <li class="comments-title">
           <?php
             $commentID_parent = $comment->comment_parent;
             if( $commentID_parent != 0 ):
           ?>
             <a href="<?php echo htmlspecialchars( get_comment_link( $commentID_parent ) ) ?>"><?php echo get_comment_author($commentID_parent); ?>さんへの返信</a>
           <?php else: ?>
             <a href="#top">「<?php the_title(); ?>」へのコメント</a>
           <?php endif; ?>
           <?php 
             if ($comment->comment_approved == '0') {
               echo '<span class="comments-approval">このコメントは承認待ちです。</span>';
             }
           ?>
           </li>
           <li class="comments-date">
             <a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>">
             <?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a>
 <span><?php edit_comment_link('(編集する)','','') ?></span>
           </li>
         </ul>
       </div>
       <!-- comment-meta -->
       <div class="comments-content">
         <?php comment_text() ?>
       </div>
       <div class="comments-reply">
         <?php comment_reply_link(array_merge( $args, array(
            'reply_text'=>'返信する', 
            'add_below' =>$add_below, 
            'depth' =>$depth, 
            'max_depth' =>$args['max_depth']))) 
         ?>
       </div>
     </div>
     <!-- comment-comment_ID -->
   <?php
}
  アバターの表示や返信ボタン、コメント投稿者名や投稿日時が出力されるようになります。HTMLの構成などもこちらでカスタマイズできます。  
コメントが表示されない時は
【コメントに関するコードでエラーが発生していないかを確認】 そもそもコードに誤りがあるとエラーとして出力されません。wp-config.phpの中にあるデバッグモードを有効にしてエラーが無いかをチェックします。   【投稿設定でコメントが有効になっているかを確認】 投稿設定でコメントが有効であったり許可されていないとコメントの表示自体もされないようです。コメントの設定はいくつかの項目で細かく設定できるようになっているので、以下の範囲を確認すれば大丈夫かと思います。 ・WordPress設定でコメントが有効になっているか ・カスタム投稿タイプの場合は投稿タイプごとにコメントが許可されているか ・個別の投稿ごとにコメントが許可されているか  
  WordPressはもともとブログサイトを構築するのに特化したCMSなのでコメント周りの機能は充実しています。結構簡単に導入できますのでカスタマイズにもぜひ挑戦してみてはいかがでしょうか?   (参考) WordPress:コメントフォームをカスタマイズする方法
XでシェアLINEで送るはてブに追加

この記事を書いた人オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はダイエットコーラとチョコレートが欠かせないアラフォーWebクリエイター。

Sponsored Link

  • Showcase
  • Startify UI
  • Functional Gradation Generator
  • Coloooors

keyword search

categories

  • WordPress(61)
  • JavaScript(49)
  • Vue.js(48)
  • CSS(46)
  • jQuery(34)
  • Nuxt.js(22)
  • Sass(21)
  • Gulp(17)
  • webpack(16)
  • PHP(14)
  • HTML(14)
  • GSAP(11)
  • React(10)
  • Vite(9)
  • Pug(9)
  • Laravel(8)
  • Cordova(8)
  • Linux(7)
  • Next.js(6)
  • Apache(5)
  • Shopify(4)
  • REST API(4)
  • Node.js(4)
  • Smarty(3)
  • Git(3)
  • JSON(3)
  • その他プログラミング(3)
  • Google Apps API(3)
  • Bootstrap(3)
  • 環境構築・システム(3)
  • TypeScript(2)
  • EJS(2)
  • RMS(2)
  • Docker(2)
  • Instagram API(2)
  • Excel VBA(2)
  • SVG(1)
  • Dart(1)
  • ECカートASP(1)
  • Markdown(1)
  • AMP(1)
  • Nginx(1)
  • XML(1)
  • shellscript(1)
  • Ruby(1)
  • MySQL(1)

recent articles

  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#6:PWA対応とビルド時のエラー

    2024.12.25/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#5:アナリティクス・アドセンスの導入とサイトマップ作成

    2024.08.26/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#4:静的・動的ルーティングとページ作成

    2024.07.31/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#3:メタ情報設定・ファイル最適化・ステート管理

    2024.06.30/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#2:コーディング環境の構築

    2024.05.29/Next.js
  • Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入
    read more

    Next.jsとWordPressでヘッドレスCMSのサイトを作成する#1:インストール・導入

    2024.04.30/Next.js
  • 次の記事
  • 一覧に戻る
  • 前の記事

まだ依頼内容が決まっていなくても、ご相談ください。

課題の整理や小さな検証、UI/UX・フロントエンドの部分的な支援から始められます。

お問い合わせやご相談はこちらから

Webサイト・プロダクトの企画設計/UI・UXデザイン/フロントエンド開発合同会社デザインサプライ(DesignSupply. LLC)

Office:大阪府大阪市天王寺区清水谷町3-22
Email:info@designsupply-web.com
home
  • サイトトップ
about
  • 3つのポリシー
  • 経営理念
  • 代表・クリエイター紹介
  • 会社概要
services
  • ビジネス・プロダクト支援
  • UI/UX・フロントエンド開発支援
  • プロジェクトの進め方・支援体制
  • エデュケーション事業
works
  • 開発プロジェクト支援
  • クリエイティブ制作
  • 自社プロダクト
media
  • デザイン
  • プログラミング
  • マーケティング
  • Web開発
  • 写真・動画制作
contact
  • お問い合わせ
news
  • インフォメーション
privacy
  • プライバシーポリシー

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

WE THINK WITH YOU, DESIGN FOR PEOPLE, AND BUILD WHAT WORKS.

© 2013 - 2026 DesignSupply.LLC
サイトトップへ
contact