WordPressのテーマファイルを開くと、HTMLの中に次のような記述が出てきます。
<?php the_title(); ?>
<?php if ( have_posts() ) : ?>
<?php endif; ?>
はじめて見ると、HTMLなのか、PHPなのか、WordPress独自の書き方なのか分かりにくいかもしれません。
この <?php や ?> は、PHPタグと呼ばれるものです。
WordPressはPHPというプログラミング言語で動いているため、テンプレートファイルの中ではHTMLとPHPを組み合わせて書くことが多くあります。
この記事では、WordPressテンプレートを読むうえで欠かせないPHPタグの意味と、基本的な使い方を丁寧に解説します。
PHPタグとは
PHPタグとは、HTMLの中でPHPの処理を書くための開始・終了の目印です。
基本形は次の通りです。
<?php
PHPの処理を書く
?>
<?php がPHPの開始を表します。
?> がPHPの終了を表します。
つまり、この2つで囲まれた部分は、PHPとして処理されます。
<?php the_title(); ?>
この場合、the_title(); がPHPとして実行されます。
WordPressでは、the_title() は投稿タイトルを表示するためのテンプレートタグです。
HTMLとPHPの違い
WordPressテンプレートでは、HTMLとPHPが混ざって書かれています。
HTMLは、ブラウザに表示する構造を作るものです。
たとえば、次のようなコードです。
<h1>記事タイトル</h1>
<p>本文が入ります。</p>
一方、PHPは、WordPressのデータを取得したり、条件によって表示を切り替えたりするために使われます。
<?php the_title(); ?>
このコードは、WordPressに登録されている投稿タイトルを取り出して表示します。
つまり、HTMLだけだと固定の文字しか書けませんが、PHPを使うことで、投稿ごとに違うタイトルや本文を自動で表示できます。
WordPressテンプレートでPHPタグが必要な理由
WordPressの投稿タイトル、本文、日付、カテゴリー、アイキャッチ画像などは、記事ごとに内容が変わります。
たとえば、投稿タイトルをHTMLだけで書くとこうなります。
<h1>サンプル記事タイトル</h1>
これでは、どの記事を開いても同じタイトルになってしまいます。
そこで、WordPressではPHPを使って、現在表示している投稿のタイトルを自動で表示します。
<h1><?php the_title(); ?></h1>
このように書くことで、記事ごとに違うタイトルが自動で入ります。
1行で書くPHPタグ
WordPressテンプレートでは、1行だけPHPを書く形がよく使われます。
<?php the_title(); ?>
これは、投稿タイトルを表示するコードです。
本文を表示する場合は、次のように書きます。
<?php the_content(); ?>
抜粋を表示する場合は、次のように書きます。
<?php the_excerpt(); ?>
投稿URLを表示する場合は、次のように書きます。
<?php the_permalink(); ?>
アイキャッチ画像を表示する場合は、次のように書きます。
<?php the_post_thumbnail(); ?>
このように、WordPressでは1行のPHPタグを使って、投稿情報を表示することがよくあります。
HTMLの中にPHPを差し込む
PHPタグは、HTMLの中に差し込んで使うことができます。
たとえば、投稿タイトルを見出しとして表示する場合は、次のように書きます。
<h1><?php the_title(); ?></h1>
リンク付きのタイトルにする場合は、次のように書きます。
<h2>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h2>
このコードでは、HTMLの中に2つのPHPタグがあります。
<?php the_permalink(); ?>
これは記事のURLを表示します。
<?php the_title(); ?>
これは記事のタイトルを表示します。
その結果、投稿一覧ページでよく見る「タイトルをクリックすると記事ページへ移動する」という表示ができます。
複数行でPHPを書く場合
PHPの処理が複数行になる場合は、次のようにまとめて書くこともできます。
<?php
if ( is_single() ) :
the_title();
endif;
?>
これは、現在のページが個別投稿ページの場合だけ、タイトルを表示するコードです。
ただし、WordPressテンプレートではHTMLとPHPを混ぜて書くことが多いため、次のように分けて書く形もよく使われます。
<?php if ( is_single() ) : ?>
<h1><?php the_title(); ?></h1>
<?php endif; ?>
この書き方の方が、HTML部分とPHP部分の関係が見やすくなります。
if文で使うPHPタグ
WordPressテンプレートでは、条件分岐の if とPHPタグがセットで使われます。
<?php if ( has_post_thumbnail() ) : ?>
<?php the_post_thumbnail(); ?>
<?php endif; ?>
このコードは、アイキャッチ画像がある場合だけ、アイキャッチ画像を表示するという意味です。
ここでは、次の3つのPHPタグが使われています。
<?php if ( has_post_thumbnail() ) : ?>
条件分岐の開始です。
<?php the_post_thumbnail(); ?>
アイキャッチ画像を表示する処理です。
<?php endif; ?>
条件分岐の終了です。
WordPressテンプレートでは、このようにPHPタグを使って、HTMLの表示を細かく制御します。
PHPタグを閉じる理由
PHPタグは、<?php で始まり、?> で閉じます。
なぜ閉じる必要があるかというと、HTMLに戻るためです。
たとえば、次のコードを見てください。
<?php if ( is_single() ) : ?>
<h1><?php the_title(); ?></h1>
<?php endif; ?>
最初のPHPタグでは、条件を判定しています。
<?php if ( is_single() ) : ?>
その後、PHPタグを閉じることで、HTMLを書ける状態に戻しています。
<h1>
そして、タイトルを表示する部分だけ、またPHPタグを使っています。
<?php the_title(); ?>
このように、WordPressテンプレートでは、
PHPで条件を判定する
HTMLを書く
必要な部分だけPHPで動的に表示する
またHTMLに戻る
という流れがよく使われます。
PHPタグを書き忘れるとどうなるか
PHPタグを書き忘れると、WordPressはその部分をPHPとして処理できません。
たとえば、次のように書いたとします。
<h1>the_title();</h1>
この場合、投稿タイトルは表示されません。
画面には、そのまま the_title(); という文字が表示されてしまう可能性があります。
正しくは、次のようにPHPタグで囲む必要があります。
<h1><?php the_title(); ?></h1>
PHPとして実行したい部分は、必ず <?php と ?> で囲みます。
PHPタグの閉じ忘れにも注意
逆に、PHPタグを閉じ忘れると、HTML部分までPHPとして解釈されてしまい、エラーになることがあります。
悪い例です。
<?php if ( is_single() ) :
<h1><?php the_title(); ?></h1>
<?php endif; ?>
このコードは、PHPの中にそのままHTMLを書いてしまっているため、エラーになる可能性があります。
正しくは、次のようにPHPタグを閉じてからHTMLを書きます。
<?php if ( is_single() ) : ?>
<h1><?php the_title(); ?></h1>
<?php endif; ?>
if の条件を書いたあとに ?> で閉じることで、HTMLを書ける状態に戻しています。
PHPだけのファイルでは終了タグを省略することもある
PHPだけで構成されるファイルでは、最後の ?> を省略することがあります。
たとえば、functions.php では次のような書き方をすることがあります。
<?php
function sample_function() {
return 'sample';
}
最後に ?> がありません。
これは、PHPだけのファイルでは終了タグの後に不要な空白や改行が入ることで、予期しないエラーにつながる場合があるためです。
ただし、テンプレートファイルではHTMLとPHPを行き来するため、?> を使う場面が多くあります。
初心者のうちは、テンプレートファイルでは次の感覚で読むと分かりやすいです。
PHPを書く部分は <?php で始める
HTMLに戻るところで ?> を書く
よく使うWordPressテンプレートタグ
WordPressテンプレートでよく使うPHPの記述を整理します。
<?php the_title(); ?>
投稿タイトルを表示します。
<?php the_content(); ?>
投稿本文を表示します。
<?php the_excerpt(); ?>
投稿の抜粋を表示します。
<?php the_permalink(); ?>
投稿ページのURLを表示します。
<?php the_post_thumbnail(); ?>
アイキャッチ画像を表示します。
<?php get_header(); ?>
header.php を読み込みます。
<?php get_footer(); ?>
footer.php を読み込みます。
<?php get_sidebar(); ?>
sidebar.php を読み込みます。
<?php get_template_part( 'content' ); ?>
content.php などのテンプレートパーツを読み込みます。
echoとは
WordPressテンプレートでは、echo という記述もよく出てきます。
echo は、値を画面に出力するための命令です。
たとえば、次のコードです。
<?php echo esc_url( home_url( '/' ) ); ?>
これは、サイトのトップページURLを出力するコードです。
リンクに使うと、次のようになります。
<a href="<?php echo esc_url( home_url( '/' ) ); ?>">
トップページへ
</a>
the_title() のように、それ自体が表示まで行う関数もあります。
一方で、home_url() のように値を返すだけの関数は、echo を使って画面に出力します。
esc_html() や esc_url() とは
WordPressテンプレートでは、次のような記述もよく見かけます。
<?php echo esc_html( get_the_title() ); ?>
<?php echo esc_url( get_permalink() ); ?>
esc_html() や esc_url() は、出力する値を安全な形に整えるための関数です。
esc_html() は、HTMLとして表示する文字を安全にします。
esc_url() は、URLとして出力する値を安全にします。
たとえば、リンクURLを出力する場合は、次のように書きます。
<a href="<?php echo esc_url( get_permalink() ); ?>">
<?php echo esc_html( get_the_title() ); ?>
</a>
WordPressのテーマをカスタマイズするときは、表示するだけでなく、安全に出力することも大切です。
PHPタグを読むときのポイント
WordPressテンプレートでPHPタグを読むときは、次の順番で見ると理解しやすくなります。
1. <?php から PHP が始まる
2. ?> で PHP が終わる
3. PHPタグの外側はHTMLとして表示される
4. the_title() などはWordPressの情報を表示する
5. if や while は表示の流れを制御する
特に、HTMLとPHPが混ざっているコードでは、PHPタグの開始と終了を見つけることが重要です。
たとえば、次のコードを見てみます。
<h2>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</h2>
この中でPHPとして処理されるのは、次の2か所だけです。
<?php the_permalink(); ?>
<?php the_title(); ?>
それ以外の <h2> や <a> はHTMLです。
この区別ができるようになると、テンプレートファイルがかなり読みやすくなります。
まとめ
PHPタグとは、HTMLの中にPHPを書くための開始・終了の目印です。
基本形は次の通りです。
<?php
PHPの処理
?>
WordPressテンプレートでは、投稿タイトルや本文などを表示するためにPHPタグを使います。
<?php the_title(); ?>
<?php the_content(); ?>
<?php the_permalink(); ?>
HTMLと組み合わせると、次のように書けます。
<h1><?php the_title(); ?></h1>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
WordPressテンプレートを読むときは、
<?php から PHP が始まる
?> で PHP が終わる
PHPタグの外側は HTML
PHPタグの内側は WordPressやPHPの処理
と整理すると分かりやすくなります。
if や while を理解する前に、PHPタグの役割を押さえておくと、WordPressテンプレートの読み方がかなり楽になります。
