はじめに
【WordPress×PHP】functions.phpの書き方では、子テーマのfunctions.phpにPHPを書くときのルールを解説しました。
今回は、記事のタイトルや本文、公開日などを表示するときに使うテンプレートタグを解説します。テンプレートタグには、the_title()とget_the_title()のように、よく似た名前の関数が2つずつ用意されています。この違いを知らないと、「文字が変な場所に表示される」「何も表示されない」といったトラブルになります。ローカル環境で試した結果とあわせて確認していきましょう。
このシリーズの全15回の構成は、第1回の記事の冒頭にまとめています。
テンプレートタグとは?
テンプレートタグは、記事のタイトル・本文・公開日・カテゴリーなどを取り出すために、WordPressが用意している関数です。「タグ」という名前ですが、HTMLのタグではなく、PHPの関数です。
たとえば、SWELLで記事のタイトルを表示しているparts/single/post_head.phpには、次のコードがあります。
<h1 class="c-postTitle__ttl"><?php the_title(); ?></h1>the_title()が、いま表示している記事のタイトルを出力するテンプレートタグです。HTMLの中に<?php the_title(); ?>と書くだけで、記事ごとに違うタイトルが表示されます。
テンプレートタグの多くは、ループ(記事を1件ずつ取り出して表示する仕組み)の中で使う前提で、「いまループで取り出している記事」の情報を返します。ループは次回解説します。
the〜とget〜の違い
テンプレートタグには、the_title()とget_the_title()のように、名前がよく似た関数がセットで用意されています(一覧は後半の表にまとめています)。2つの違いは、次のとおりです。
- the_〜:値をその場で出力(echo)する。戻り値はない
- get_〜:値を返す(return)だけで、出力はしない
【PHP】関数の作り方と使い方を解説で解説した、echoとreturnの違いそのものです。

ローカル環境で、それぞれの戻り値をvar_dump()で調べてみました。
$a = the_title();
var_dump( $a );
$b = get_the_title();
var_dump( $b );Hello world!NULL
string(12) "Hello world!"
the_title()は、呼び出した時点でタイトルを出力し、戻り値はNULL(何もない)でした。get_the_title()は何も出力せず、タイトルを文字列として返しています。
どちらを使えばいい?
使い分けの目安は、次のとおりです。
- テンプレートの中で、そのまま表示するだけ → the_〜
- 変数に入れる、ほかの文字と連結する、if文で判定する、文字数を数えるなど、値を加工してから使う → get_〜
SWELLでも、見出しの<h1>ではthe_title()でそのまま出力し、検索エンジン向けのデータを作る部分(classes/Json_Ld.php)ではwp_strip_all_tags( get_the_title() )のように、受け取ったタイトルからHTMLタグを取り除いて使っています。
よくある間違い1:the_〜を文字列に連結する
「タイトル:」という文字と記事のタイトルを<p>で囲んで表示しようとして、次のように書くと、どうなるでしょうか。
echo '<p>タイトル:' . the_title() . '</p>';ローカル環境で試したところ、出力されたHTMLは次のようになりました。
Hello world!<p>タイトル:</p>
タイトルが<p>の外側、しかも前に出てしまい、<p>の中は「タイトル:」だけになっています。

PHPは、echoで出力する前に、まず.(【PHP】演算子の種類と使い方を解説で解説した文字列連結演算子)で連結する文字列を組み立てます。その途中でthe_title()が呼ばれた瞬間に、タイトルが先に出力されてしまいます。しかもthe_title()の戻り値はNULLなので、連結される部分は空になります。
文字列に連結するときは、get_the_title()を使います。
echo '<p>タイトル:' . esc_html( get_the_title() ) . '</p>';<p>タイトル:Hello world!</p>
esc_html()は、文字列を安全な形にしてから出力するための関数です(第12回で解説します)。
the_title()には、前後に付ける文字を引数で渡せます。the_title( ‘<h2>’, ‘</h2>’ );と書くと、<h2>Hello world!</h2>のように出力されました。単純にタグで囲むだけなら、この書き方でも同じ結果になります。
よくある間違い2:get_〜をechoし忘れる
反対に、get_the_title()だけを書いても、画面には何も表示されません。
get_the_title(); // 何も表示されないget_the_title()はタイトルを返すだけなので、返ってきた値をechoしなければ、そのまま捨てられてしまいます。エラーにもならないので、気付きにくい間違いです。「書いたのに何も表示されない」ときは、get_〜をechoしているかどうかを確認しましょう。
同じ情報でも結果が変わるテンプレートタグ
the〜とget〜は、「出力するか、返すか」だけが違うと思われがちですが、中には取り出した結果そのものが違うものもあります。代表的な2つを紹介します。
the_content()とget_the_content()
本文を取り出す2つの関数で、出力された内容を比べてみました。ブロックエディターで「本文A」と1段落だけ書いた記事では、次の結果になりました。
(the_content()の出力)
<p class="wp-block-paragraph">本文A</p>
(echo get_the_content() の出力)
<!-- wp:paragraph -->
<p>本文A</p>
<!-- /wp:paragraph -->
get_the_content()は、データベースに保存されている本文をほぼそのまま返します。ブロックエディターの区切りを表すコメント(<!-- wp:paragraph -->)が残り、ブロックのクラス名も付いていません。
the_content()は、出力する前に、WordPressやテーマ・プラグインが用意した加工の処理(the_contentフィルター)を通しています。ブロックをHTMLに変換する、改行を段落タグに変える、ショートコードを実行する、といった処理です。

本文を表示するときは、the_content()を使うのが基本です。
本文を変数に入れてから表示したい場合は、apply_filters( ‘the_content’, get_the_content() )と書くと、the_content()と同じ加工をした結果を受け取れます。ローカル環境でも、the_content()と同じ出力になりました。フィルターの仕組みは第10回で解説します。
the_date()は同じ日付の2件目以降で表示されない
公開日を表示するthe_date()には、ほかのテンプレートタグにない特徴があります。同じ日に公開された記事が続くと、2件目以降は何も出力しないのです。
公開日が同じ「記事A」「記事B」を含む4件の記事で、ループの中でthe_date()とget_the_date()を並べて出力してみました。
| 記事 | the_date() | get_the_date() |
|---|---|---|
| Hello world! | 2026年10月6日 | 2026年10月6日 |
| 記事B | 2026年10月1日 | 2026年10月1日 |
| 記事A | (何も表示されない) | 2026年10月1日 |
| 古い記事 | 2023年4月1日 | 2023年4月1日 |
the_date()は、もともと「日付ごとに記事をまとめて表示する」ブログの形式に合わせて作られているためです。記事一覧のすべての記事に公開日を表示したいときは、get_the_date()をechoするか、the_time()を使います。
echo esc_html( get_the_date() );主なテンプレートタグ一覧
よく使うテンプレートタグを、the〜とget〜のセットでまとめました。
| 出力する | 値を返す | 取り出す情報 |
|---|---|---|
the_title() | get_the_title() | タイトル |
the_content() | get_the_content() | 本文 |
the_excerpt() | get_the_excerpt() | 抜粋 |
the_permalink() | get_permalink() | 記事のURL |
the_ID() | get_the_ID() | 投稿ID |
the_date() / the_time() | get_the_date() | 公開日 |
the_modified_date() | get_the_modified_date() | 最終更新日 |
the_category() | get_the_category() | カテゴリー |
the_post_thumbnail() | get_the_post_thumbnail() | アイキャッチ画像 |
いくつか注意点があります。
- 記事のURLは、
get_the_permalink()ではなくget_permalink()がよく使われます(get_the_permalink()もあり、同じ結果を返します) the_category()はカテゴリーのリンクを出力しますが、get_the_category()は文字列ではなく、カテゴリーの情報をまとめた配列を返します(中身はオブジェクトで、第8回で解説します)- 日付を返す関数は、
get_the_date( 'Y年n月j日' )のように引数で書式を指定できます。'U'を指定すると、計算に使える数値(1970年からの秒数)を返します
ループの外では投稿IDを指定する
get_〜の多くは、引数に投稿IDを渡すと、ループで取り出している記事ではなく、指定した記事の情報を返します。
echo esc_html( get_the_title( 1 ) ); // 投稿IDが1の記事のタイトル
echo esc_url( get_permalink( 1 ) ); // 投稿IDが1の記事のURLローカル環境で試すと、投稿IDが1の「Hello world!」のタイトルとURLが表示されました。SWELLでも、パンくずリストの部分(parts/breadcrumb.php)でget_the_title( $the_id )のように、IDを指定してタイトルを取り出しています。
一方、the_title()の引数は、先ほどのメモで紹介した「前後に付ける文字」なので、記事を指定することはできません。ループの外や、別の記事の情報を使うときはget_〜と覚えておくと便利です。
実務サンプル:古い記事の上にお知らせを表示する
ここまでの内容を使って、最終更新日から1年以上たった記事の上に、「内容が古くなっている可能性があります」というお知らせを表示してみましょう。
最終更新日を「計算に使う」ので、the〜ではなく**get〜**の出番です。子テーマのfunctions.phpの、もともとあるコードの下に、次のコードを追加します。
/**
* 最終更新から1年以上たった記事の上にお知らせを表示する
*/
add_action( 'swell_before_post_head', function( $post_id ) {
$modified = (int) get_the_modified_date( 'U', $post_id );
if ( time() - $modified < YEAR_IN_SECONDS ) {
return;
}
$message = 'この記事は最終更新日(' . get_the_modified_date( 'Y年n月j日', $post_id ) . ')から1年以上たっています。'
. '内容が古くなっている可能性があります。';
echo '<p class="kurumico-old-notice">' . esc_html( $message ) . '</p>';
} );見た目を整えるため、子テーマのstyle.cssにも次のCSSを追加します。
.kurumico-old-notice {
padding: 1em;
margin-bottom: 2em;
background: #fff8e1;
border-left: 4px solid #f0a500;
font-size: .9em;
}2023年4月1日に公開した記事を開くと、タイトルの上に次のように表示されました。最終更新から1年たっていない記事には、何も表示されません。

コードのポイントは次のとおりです。
swell_before_post_headは、SWELLが記事のタイトル部分の直前に用意しているSWELL独自のフック。表示中の記事の投稿IDを$post_idとして受け取れるget_the_modified_date( 'U', $post_id )で最終更新日を数値として受け取り、現在の時刻(time())との差を計算しているYEAR_IN_SECONDSは1年の秒数を表すWordPressの定数で、YEAR_IN_SECONDS * 2にすれば「2年以上」になる- お知らせの文章は、受け取った日付を連結して作り、最後に1回だけ
echoしている
swell_before_post_headはSWELL独自のフックなので、SWELL以外のテーマでは使えません。ほかのテーマで本文の前にお知らせを入れる方法は、第10回のフィルターフックで解説します。
よくある質問・エラー対処
Q. 使いたい関数が、出力するのか値を返すのか分かりません
→ WordPressの公式リファレンス(developer.wordpress.org)で関数名を調べると、「Return」の欄に戻り値が書かれています。「void」(何も返さない)なら出力するタイプです。
Q. 日付の表示形式を変えたいです
→ サイト全体の形式は、管理画面の「設定」→「一般」の「日付形式」で変えられます。個別に変えたい場合は、get_the_date( 'Y/m/d' )のように引数で書式を指定します。
おわりに(まとめ)
テンプレートタグは、the_〜とget_〜の違いを押さえれば、迷わずに使い分けられます。
- ✅ テンプレートタグは、記事のタイトルや本文などを取り出すWordPressの関数
- ✅ the_〜はその場で出力し、get_〜は値を返す
- ✅ そのまま表示するならthe_〜、連結・計算・判定に使うならget_〜
- ✅ the_〜を文字列に連結すると、表示される位置がずれる
- ✅ get_〜はechoしないと何も表示されない
- ✅ get_the_content()はthe_contentフィルターを通らず、the_date()は同じ日付の2件目以降を表示しない
- ✅ ループの外や別の記事の情報は、get_〜に投稿IDを渡して取り出す
次回は、テンプレートタグが「どの記事」の情報を返すかを決めている「ループ」の仕組みを、SWELLのsingle.phpを読みながら解説します。
次回は、ループの仕組み(SWELLのsingle.phpを読む)について解説予定です。
この記事が、少しでも誰かのお役に立てれば幸いです。
関連記事
※1回買えば複数サイトで使い回しOK
当サイトの記事で使用したVBAなどのサンプルをDLできます
この記事のサンプルはありません!
ダウンロードページへは下のカードをクリックすればジャンプできます。
よろしければご利用ください!


