概要と目標
コメント部分のテンプレートや、
固定ページのテンプレートを作ろう。
投稿に対するコメント部分のテンプレートや
個別ページのテンプレートファイルの作成方法を学習しましょう。
投稿に対するコメント部分のテンプレートや
個別ページのテンプレートファイルの作成方法を学習しましょう。
コメント用のテンプレートファイルは、「comments.php」というファイルに作り、
comments_template() 関数で読み込むことことができる。
comments_template 関数 ・・・ コメントテンプレートを読み込む関数comments_template(読み込むファイル名, コメントを区切るかどうか)
省略可
引数の詳細はWordPress Codex 日本語版を参照
<section class="p-comments">
<div class="p-comments__innter">
<h2 class="p-comments__title">コメントとトラックバック</h2>
<ul class="p-comments__list">
<li id="comment-2" class="comment byuser comment-author-ore bypostauthor even thread-even depth-1">
<article id="div-comment-2" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img class="avatar" src="http://placehold.it/130x130">
<b class="fn">著者名</b> <span class="says">より:</span>
</div><!-- .comment-author -->
<div class="comment-metadata">
<a href="#">
<time datetime="2019-09-30T09:42:46+09:00">
2019年9月30日 9:42 AM </time>
</a>
<span class="edit-link"><a class="comment-edit-link" href="#">編集</a></span> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>コメント。コメント。コメント。コメント。コメント。コメント。</p>
</div><!-- .comment-content -->
<div class="reply">
<a rel="nofollow" class="comment-reply-link" href="#comment-2" data-commentid="2" data-postid="104" data-belowelement="div-comment-2" data-respondelement="respond" aria-label="返信">返信</a>
</div>
</article><!-- .comment-body -->
</li><!-- #comment-## -->
<li id="comment-3" class="comment byuser comment-author-ore bypostauthor odd alt thread-odd thread-alt depth-1 parent">
<article id="div-comment-3" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img class="avatar" src="http://placehold.it/130x130">
<b class="fn">著者名</b> <span class="says">より:</span>
</div><!-- .comment-author -->
<div class="comment-metadata">
<a href="#">
<time datetime="2019-09-30T09:42:56+09:00">
2019年9月30日 9:42 AM </time>
</a>
<span class="edit-link"><a class="comment-edit-link" href="#">編集</a></span> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>
コメント。コメント。コメント。コメント。<br />
コメント。コメント。コメント。
</p>
</div><!-- .comment-content -->
<div class="reply">
<a rel="nofollow" class="comment-reply-link" href="#comment-3" data-commentid="3" data-postid="104" data-belowelement="div-comment-3" data-respondelement="respond" aria-label="返信">返信</a>
</div>
</article><!-- .comment-body -->
<ul class="children">
<li id="comment-5" class="comment byuser comment-author-ore bypostauthor even depth-2">
<article id="div-comment-5" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img class="avatar" src="http://placehold.it/130x130">
<b class="fn">著者名</b> <span class="says">より:</span>
</div><!-- .comment-author -->
<div class="comment-metadata">
<a href="#">
<time datetime="2019-09-30T19:24:15+09:00">
2019年9月30日 7:24 PM </time>
</a>
<span class="edit-link"><a class="comment-edit-link" href="#">編集</a></span> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>これが返信だ</p>
</div><!-- .comment-content -->
<div class="reply">
<a rel="nofollow" class="comment-reply-link" href="#comment-5" data-commentid="5" data-postid="104" data-belowelement="div-comment-5" data-respondelement="respond" aria-label="返信">返信</a>
</div>
</article><!-- .comment-body -->
</li><!-- #comment-## -->
</ul><!-- .children -->
</li><!-- #comment-## -->
<li id="comment-4" class="comment byuser comment-author-ore bypostauthor odd alt thread-even depth-1">
<article id="div-comment-4" class="comment-body">
<footer class="comment-meta">
<div class="comment-author vcard">
<img class="avatar" src="http://placehold.it/130x130">
<b class="fn">著者名</b> <span class="says">より:</span>
</div><!-- .comment-author -->
<div class="comment-metadata">
<a href="#">
<time datetime="2019-09-30T09:43:06+09:00">
2019年9月30日 9:43 AM </time>
</a>
<span class="edit-link"><a class="comment-edit-link" href="#">編集</a></span> </div><!-- .comment-metadata -->
</footer><!-- .comment-meta -->
<div class="comment-content">
<p>コメント。コメント。コメント。</p>
</div><!-- .comment-content -->
<div class="reply">
<a rel="nofollow" class="comment-reply-link" href="#comment-4" data-commentid="4" data-postid="104" data-belowelement="div-comment-4" data-respondelement="respond" aria-label="返信">返信</a>
</div>
</article><!-- .comment-body -->
</li><!-- #comment-## -->
</ul>
<section class="p-comments__form">
<div id="respond" class="comment-respond">
<h3 id="reply-title" class="comment-reply-title">コメントを残す</h3>
<p class="comment-notes">メールアドレスが公開されることはありません。 * が付いている欄は必須項目です</p>
<form action="#" class="comment-form">
<p class="logged-in-as">
<a href="#" aria-label="著者名 としてログイン中。プロフィールを編集。">著者名 としてログイン中</a>。
<a href="#">ログアウトしますか ?</a>
</p>
<p class="comment-form-comment">
<label for="comment">コメント</label>
<textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"></textarea>
</p>
<p class="form-submit">
<input name="submit" type="submit" id="submit" class="submit" value="コメントを送信" />
</p>
</form>
</div><!-- #respond -->
</section>
</div>
</section>
コメントは、は、管理画面でコメントが許可されている、もしくは、1つ以上のコメントがある時だけ、必要なので、comments_open() と、get_comments_number() を使って、どっちもの条件が満たされている時だけ、コメントのテンプレートを読み込む。
comments_open 関数 ・・・ 投稿に対するコメントが許可されているかどうかを確認する関数comments_open(投稿ID)
省略可
投稿ID:確認したい投稿IDを指定(省略時は、現在の投稿)
引数の詳細はWordPress Codex 日本語版を参照
get_comments_number 関数 ・・・ 投稿に対するコメント、トラックバック、ピンバックの合計数を取得する関数get_comments_number(投稿ID)
省略可
投稿ID:確認したい投稿IDを指定(省略時は、現在の投稿)
引数の詳細はWordPress Codex 日本語版を参照
</div>
<?php if ( comments_open() || get_comments_number() ) :
comments_template();
endif; ?>
</main>
コメント用のテンプレートファイルは、「comments.php」というファイルに作り、
wp_list_comments() 関数で読み込むことことができる。
wp_list_comments 関数 ・・・ 投稿や固定ページのコメントを表示する関数wp_list_comments(オプションの連想配列)
省略可
引数の詳細はWordPress Codex 日本語版を参照
| キー | 値 | 初期値 |
|---|---|---|
'style' |
梱包するタグを、'div'、'ol' または 'ul'で指定 | 'ul' |
'callback' |
コールバック関数 | null |
'end-callback' |
終了時のコールバック関数 | null |
'type' |
コメントの種類 ('all'、'comment'、'trackback'、'pingback'、'pings' から指定) |
'all' |
'avatar_size' |
アバターサイズ | 32 |
wp_list_comments()に置き換える。<ul class="p-comments__list">
<?php
$args = [
'avatar_size' => 160,
];
wp_list_comments($args);
?>
</ul>
上記で問題なく表示されたが、コメントがない記事の場合、不要なタグを排出してしまうので、
have_comments() 関数でコメントがある時だけ表示するように変更する
have_comments 関数 ・・・ コメントがあるかどうかを確認する関数have_comments()
引数の詳細はWordPress Codex 日本語版を参照
have_comments()で確認してから表示する。
<?php if ( have_comments() ) : ?>
<ul class="p-comments__list">
<?php
$args = [
'avatar_size' => 160,
];
wp_list_comments($args);
?>
</ul>
<?php endif; ?>
comment_form()関数を使う。
コメントフォームを表示するには、comment_form()という関数を使う。
なお、コメントが許可されている投稿のみに表示したいので、comments_open()と組み合わせて使う。
comment_form 関数 ・・・ メントフォームを出力する関数comment_form()
引数の詳細はWordPress Codex 日本語版を参照
comment_form()に置き換えて、コメントフォームを表示する
<?php if (comments_open()) : ?>
<section class="p-comments__form">
<?php comment_form(); ?>
</section>
<?php endif; ?>
WordPressでは、投稿にパスワードをかけることができる。
その為、パスワード解除されるまでコメントを表示しないようにしておく方が好ましい。
パスワード保護されている投稿かや、パスワード解除されたかは、post_password_required()という関数で判別できる。
post_password_required 関数 ・・・ 投稿がパスワードを必要とするか、また正しいパスワードが入力されたかを確認する関数post_password_required(投稿ID)
省略可
戻り値: パスワード保護されていないまたは、解除されている場合 ・・・ false そうじゃない場合 ・・・ true
引数の詳細はWordPress Codex 日本語版を参照
<?php
if ( post_password_required() ) {
return;
}
?>
WordPressでは、HTML5に対応していない昔のテーマとの互換性を確保するため、
「検索」、「コメントフォーム」、「コメント一覧」、「ギャラリー」、「キャプション」に、
HTML5のタグが使われないようになっている。
これらの箇所にHTML5のタグを適用させるには、add_theme_support()で有効にする必要がある。
dummy_setup() 関数内に、以下のコードを追記する
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
/*
HTML5をサポート
----------------------------------- */
$args = [
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption'
];
add_theme_support( 'html5', $args);
固定ページのテンプレートは、「page.php」というファイルを作ることで対応できる。
なお、投稿の詳細ページと固定ページで同じテンプレートを使いたい場合は、
「singular.php」というファイルを作れば共有することができるが、
今回の固定ページのデザインは、サイドバーやコメントを使わないため利用しない。
<?php get_header(); ?>
<main class="l-main -single">
<header class="p-hero">
<h1 class="p-hero__title">ページのタイトル</h1>
<figure class="p-hero__eyecatch">
<img src="assets/images/no-picture_page.png" srcset="assets/images/no-picture_page.png, assets/images/no-picture_page@2x.png 2x" alt="">
</figure>
</header>
</main>
<?php get_footer(); ?>
<?php get_header(); ?>
<?php while ( have_posts() ) : the_post(); ?>
<main class="l-main -single">
<header class="p-hero">
<h1 class="p-hero__title">ページのタイトル</h1>
<figure class="p-hero__eyecatch">
<img src="assets/images/no-picture_page.png" srcset="assets/images/no-picture_page.png, assets/images/no-picture_page@2x.png 2x" alt="">
</figure>
</header>
</main>
<?php endwhile; ?>
<?php get_footer(); ?>
<main class="l-main -single">
<header class="p-hero">
<h1 class="p-hero__title"><?php the_title(); ?></h1>
<?php if ( has_post_thumbnail()) : ?>
<figure class="p-hero__eyecatch">
<?php the_post_thumbnail(); ?>
</figure>
<?php endif; ?>
</header>
<div class="l-contents -themeWhite">
<div class="p-article">
<div class="l-container -slim">
<section class="p-article__body">
<?php the_content(); ?>
</section>
</div>
<!-- /.l-container -->
</div>
<!-- /.l-article -->
</div>
<!-- /.l-contents -->
</main>
完成例を参考に固定ページのアイキャッチ画像のサイズを設定して下さい。
| 項目 | 設定値 |
|---|---|
| サイズ名 | dummy-full |
| 幅 | 1200 |
| 高さ | 400 |
| 切り抜き | あり |
/*
アイキャッチ画像
----------------------------------- */
add_theme_support( 'post-thumbnails' );
// 画像サイズを追加
set_post_thumbnail_size(776, 549, true); // 投稿ページ用
add_image_size('dummy-thumbnail', 248, 175, true); // 投稿一覧用
add_image_size('dummy-full', 1200, 400, true); // 固定ページ用
<?php if ( has_post_thumbnail()) : ?>
<figure class="p-hero__eyecatch">
<?php the_post_thumbnail( 'dummy-full' ); ?>
</figure>
<?php endif; ?>
解答例は全問題のチェックボックスが on になるとご覧いただけます。
コメント一覧は、comments.phpというファイルがテンプレートファイルになり、
固定ページはpage.phpというファイルテンプレートになる。
comments.phpに作成するcomment_form()で呼び出すpage.phpに作成する