今回は 個別投稿記事を表示する single.php 作成の続きです。
前回作成したものをベースに、投稿コメント、コメント入力欄、ページネーション を
組み込んでいきます。
前回の内容は 「single.php を作成する – [1]」 をどうぞ。
今回修正したソースはコチラ ↓
<?php get_header(); ?> <!-- 記事表示部分ここから --> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <div class="post hentry"> <h2 class="entry-title"><?php the_title(); ?></h2> <div class="entry-box"> <span class="entry-date"> 公開日:<time class="published" datetime="<?php the_time('c'); ?>"><?php the_time(get_option('date_format')); ?></time> </span> <?php the_category(', '); ?><?php the_tags('', ', '); ?> </div> <div class="entry-content"> <?php the_content(); ?> </div> <div class="entry-link"> <?php wp_link_pages(); ?> </div> </div> <!-- /.post --> <?php endwhile; ?> <!-- コメント --> <?php comments_template(); ?> <!-- ページナビ --> <div class="page-navi"> <dl> <?php $prev_post = get_previous_post(); if (!empty($prev_post)) : ?> <dt>Prev:</dt><dd><a href="<?php echo get_permalink($prev_post->ID); ?>"><?php echo $prev_post->post_title; ?></a></dd> <?php endif; ?> <?php $next_post = get_next_post(); if (!empty($next_post)) : ?> <dt>Next:</dt><dd><a href="<?php echo get_permalink($next_post->ID); ?>"><?php echo $next_post->post_title; ?></a></dd> <?php endif; ?> </dl> </div> <?php else : ?> <p>記事がありません</p> <?php endif; ?> <!-- 記事表示部分ここまで --> <?php get_footer(); ?>
今回追加した内容はハイライト表示しています。
コメントもページネーションも、記事が存在する場合のみ表示できるものですので、
4行目の if (have_posts()) 、38行目の else 内の投稿記事があった場合の
処理ブロックに記述しています。
まず、コメント部分です。
25行目の comments_template は、コメントテンプレートを読み込む
インクルードタグ関数です。
表示中の記事のコメントを取得し、コメント(表示 /投稿) 用の
テンプレートファイルを表示してくれます。
(投稿ページ、固定ページ以外ではこの関数は動作しません)
第一パラメータにファイルパスを指定した場合はそのファイルを、
何も指定しなかった場合は WordPress テーマ内のコメントテンプレート
comments.php を表示しようとしますが、comments.php が存在しない
場合は、WordPress 標準のコメントテンプレートが適用されます。
つまり、わざわざ別途テンプレートを作成しなくても、
(WordPress 標準テンプレートでよければ) comments_template を呼び出すだけで、
コメント表示やコメント投稿部分が表示できるのですね。
逆に、自分で comments.php を作成すれば、コメント表示やコメント投稿部分を
自由にカスタマイズできますが、これの説明はまた別途・・・
次はページネーション部分です。
一覧系画面でのページネーションはあくまでページ単位の遷移でしたが、
ここでのページネーションはページ単位というより記事単位の遷移に
なります。投稿時間順に、「前の記事」 「次の記事」 へのリンクを表示します。
29行目では、get_previous_post 関数で現在表示中の記事の
前の記事を取得し、存在する (emptyでない) 場合に get_permalink で
リンクを表示しています。get_permalink のパラメータには、前の記事である
$prev_post の ID を指定しています。
同様に32行目では、get_next_post 関数で現在表示中の記事の
次の記事を取得し、存在する (emptyでない) 場合に get_permalink で
リンクを表示しています。get_permalink のパラメータには、次の記事である
$next_post の ID を指定しています。
さて、これで
2. 公開日
3. カテゴリ
4. タグ
5. 本文
6. 投稿コメント
7. コメント入力欄
8. ページネーション
の表示を組み込んだ single.php が完成しました。
各 HTML 要素に class 属性を与えてありますので、style.css に
それに相当するスタイルを追記します。
/* 単独記事 */ #main .post { /* 記事ブロック */ display: block; margin: 0px 0px 10px 0px; padding: 0px; } #main .post .entry-title { /* タイトル */ font-size: 18px; font-weight: bold; line-height: 30px; margin: 0px; padding: 0px; } #main .post .entry-box { /* 公開日、カテゴリ等 */ font-size: 11px; line-height: 13px; margin: 0px 3px 0px 10px; padding: 3px; } #main .post .entry-content { /* 本文 */ line-height: 1.5; /* 単位なしの場合は要素内に特別大きい文字があると、その文字のline-heightで調整してくれる */ } #main .post .entry-content a { color: #0000ff; } #main .post .entry-content a:hover { color: #cc0033; } #main .post .entry-link { /* リンク */ } #main .post .entry-link a { color: #333333; } #main .post .entry-link a:hover { color: #cc0033; } /* コメント */ #main #comments { margin: 30px 0px 10px 0px; padding: 0px; } #main #comments .comments-title { /* 表示タイトル */ font-size: 16px; font-weight: bold; line-height: 28px; margin: 0px; padding: 0px 0px 0px 7px; border-left: solid 7px #993333; } #main #comments .comment-reply-title { /* 投稿タイトル */ font-size: 16px; font-weight: bold; line-height: 28px; margin: 0px; padding: 0px 0px 0px 7px; border-left: solid 7px #993333; } /* ページナビ */ #main .page-navi { margin: 30px 0px 0px 0px; } #main .page-navi dl dt { float: left; } #main .page-navi a { color: #666666; } #main .page-navi a:hover { color: #cc0033; }
追記する場所はメインコンテンツの基本指定より後であれば、どこでも
問題ありませんが、メインコンテンツの一覧表示のスタイル設定の直後にでも
追記しておくのが分かりやすくていいでしょう。
これで今回の作業は終了です。
次回は個別固定ページの page.php を作成する予定です。
ではまた次回・・・