the_title()を使っているときに少し詰まったことを備忘録としてメモ。
詰まった点
投稿記事一覧を表示する際に、PHPで少し処理を実装したかったので以下のように記述しました。
PHP
<?php if(have_posts()) : while(have_posts()) : the_post(); ?> <div class="article"> <?php // PHPで少し処理 echo '<p>' . the_title() . '</p>'; ?> </div> <?php endwhile; else: ?> <?php endif; ?>
表示を確認してみると、以下のようにタイトルのテキストがpタグの外に出力されていました。
HTML
<div class="article"> 投稿タイトル<p></p></div> <div class="article"> 投稿タイトル<p></p></div> <div class="article"> 投稿タイトル<p></p></div>
色々試してみた結果、the_title()の代わりにget_the_title()を使うか、pタグとthe_title()を別々にechoすると意図した出力になっていました。
PHP
<?php if(have_posts()) : while(have_posts()) : the_post(); ?> <div class="article"> <?php // PHPで少し処理 echo '<p>' . get_the_title() . '</p>'; ?> </div> <?php endwhile; else: ?> <?php endif; ?>
PHP
<?php if(have_posts()) : while(have_posts()) : the_post(); ?> <div class="article"> <?php // PHPで少し処理 echo '<p>'; echo the_title(); echo '</p>'; ?> </div> <?php endwhile; else: ?> <?php endif; ?>
HTML
<div class="article"> <p>投稿タイトル</p></div> <div class="article"> <p>投稿タイトル</p></div> <div class="article"> <p>投稿タイトル</p></div>
the_title()とget_the_title()の違い
the_title()はループの中で使用、get_the_title()はループの外で投稿IDを指定して使用、という認識だったのですが、the_title()はechoまで行うのに対して、get_the_title()はタイトルを返すのみという違いがあるようです。
最初のサンプルコードのようにドットで連結してechoした場合、the_title()が呼ばれた時点でechoされてしまっているため、pタグの前にタイトルが出力されていました。
あと、2番目のサンプルでも使用していますが、get_the_title()で指定する投稿IDの初期値は現在の投稿になるようなので、ループの中でもパラメータの指定をしないで使用できるようです。
【参考サイト】
コメントが承認されるまで時間がかかります。