1. ホーム
  2. WordPress

【WordPress】the_title と get_the_title の違いと使い方|投稿タイトルを取得・表示する

Share

WordPress のテーマを作っていると、投稿のタイトルを表示する場面が何度も出てきます。そのときに使うのが the_title()get_the_title() です。名前がよく似ていますが、「その場で出力する」か「値を受け取る」かという大事な違いがあります。この記事では、2つの関数の違いと使い分け、タイトルの前後に文字を付ける引数、ループの外で特定の投稿タイトルを取得する方法、あわせて投稿IDを扱う the_ID() / get_the_ID() まで、初心者の方にも分かるように解説します。

the_title と get_the_title の違い

WordPress のテンプレートタグには、the_ で始まるものと get_the_ で始まるものがペアで存在することがよくあります。両者の違いはシンプルで、the_title() はタイトルをその場で出力(echo)し、get_the_title() はタイトルを文字列として返す(return)だけ、という点です。

関数動作使う場面
the_title()タイトルをそのまま出力するテンプレートにそのまま表示したいとき
get_the_title()タイトルを文字列で返す変数に入れる・加工する・条件に使うとき

つまり「画面に出すだけ」なら the_title()、「いったん受け取って何か処理してから使う」なら get_the_title() と覚えておけば、ほとんどの場面で迷いません。

the_title() でタイトルを表示する

もっとも基本的な使い方は、ループの中で the_title() を呼ぶだけです。WordPress のループ(have_posts()the_post() の繰り返し)の中では「現在の投稿」が決まっているため、引数なしでその投稿のタイトルが出力されます。

index.php
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

  <h2><?php the_title(); ?></h2>

<?php endwhile; endif; ?>

the_title() には、タイトルの前後に文字を付ける引数があります。第1引数が前(before)、第2引数が後ろ(after)です。見出しタグやアイコンをまとめて付けたいときに便利です。

index.php
<?php
// the_title( $before, $after, $echo )
the_title( '<h2 class="entry-title">', '</h2>' );
// 出力: <h2 class="entry-title">記事タイトル</h2>

第3引数 $echofalse を渡すと、出力せずに文字列を返すようになります。ただしこの使い方をするくらいなら、最初から次に紹介する get_the_title() を使う方が意図が明確で読みやすくなります。

get_the_title() でタイトルを受け取る

タイトルを変数に入れたり、文字数で切り詰めたり、条件分岐に使ったりしたいときは get_the_title() を使います。値が返ってくるので、自由に加工できます。

functions.php / テンプレート
<?php
$title = get_the_title();          // タイトルを文字列で受け取る
$short = mb_substr( $title, 0, 20 ); // 先頭20文字だけ取り出す

echo esc_html( $short );           // 加工した文字列を安全に出力

注意したいのは、get_the_title()自分では出力しないことです。echo を付け忘れると画面に何も表示されません。逆に the_title()echo を付けてしまうと二重に出力されたりエラーになったりするので、「the_ はそのまま、get_the_echo とセット」と覚えておきましょう。

ループの外で特定の投稿タイトルを取得する

get_the_title() は、引数に投稿IDを渡すと、その投稿のタイトルを取得できます。これによりループの外でも、任意の投稿のタイトルを表示できます。たとえば「固定ページのIDを指定してタイトルを出す」といった使い方です。

テンプレート
<?php
// ID が 10 の投稿のタイトルを取得して表示
echo esc_html( get_the_title( 10 ) );

なお the_title() にはIDを渡す引数がありません。ループの外で特定投稿のタイトルを扱うなら、ID指定ができる get_the_title() を使うのが基本です。

投稿ID を取得する the_ID と get_the_ID

タイトルと同じ the_ / get_the_ のペアは、投稿IDにもあります。the_ID() は現在の投稿のIDを出力し、get_the_ID() はIDを数値で返します。HTMLの id 属性に使ったり、IDを別の関数に渡したりするときに役立ちます。

index.php
<?php while ( have_posts() ) : the_post(); ?>

  <article id="post-<?php the_ID(); ?>">
    <h2><?php the_title(); ?></h2>
  </article>

<?php endwhile; ?>
テンプレート
<?php
// ID を変数に入れて別の関数へ渡す
$post_id = get_the_ID();
$title   = get_the_title( $post_id );

タイトルが表示されない・空になるとき

get_the_title() なのに何も出ない

もっとも多いのが、get_the_title()echo を付け忘れているケースです。この関数は値を返すだけなので、表示するには echo get_the_title(); のように出力が必要です。表示専用でよければ the_title() に置き換えると確実です。

ループの外で空になる

サイドバーやヘッダーなどループの外で the_title() を引数なしで呼ぶと、「現在の投稿」が決まっていないため正しく取得できないことがあります。この場合は get_the_title( $id ) のように対象の投稿IDを明示してください。アーカイブページのタイトルなど投稿以外の見出しが欲しいときは、用途に応じて the_archive_title()wp_title() といった別の関数を使います。

タイトルにHTMLタグが入る

取得したタイトルを 属性値 や独自の場所に出力するときは、esc_html() でエスケープしておくと安全です。なお the_title() はテーマでの利用を想定して整形済みの出力を行いますが、自分で get_the_title() の結果を出力する場合は、出力先に合わせて esc_html()esc_attr() を使い分けるのが安全な書き方です。

まとめ

the_title()get_the_title() は、出力するか値を返すかが違うだけの兄弟のような関数です。要点を整理します。

  • the_title() はその場で出力。前後の文字は第1・第2引数で付けられる。
  • get_the_title() は文字列を返す。表示するには echo が必要。
  • 投稿IDを渡せるのは get_the_title( $id )。ループ外で特定投稿のタイトルを扱える。
  • IDは the_ID() で出力、get_the_ID() で取得できる。
  • 自分で出力するときは esc_html() などでエスケープすると安全。

「表示するだけなら the_、加工するなら get_the_」という考え方は、WordPress の他のテンプレートタグにも共通します。この使い分けに慣れておくと、テーマづくり全体がスムーズになります。

参考ページ