WordPressテーマでは、HTMLの中でPHPを使い、投稿や設定の内容を表示します。最初から複雑なプログラムを作るのではなく、テーマで頻繁に読む構文へ絞って確認します。
PHPが実行される場所
PHPのコードはブラウザへそのまま届かず、サーバーで実行された結果のHTMLが返されます。

PHPはWebサーバー側で実行されるプログラミング言語です。ブラウザがPHPのコードを直接読むのではなく、サーバーがPHPを実行して生成したHTMLを受け取ります。
そのため、ブラウザの「ページのソースを表示」ではPHPのコードは見えません。表示されるのは実行後のHTMLです。
変数・配列・条件分岐・繰り返し
変数は、後で使う値へ名前を付けて保存する仕組みです。配列は複数の値をまとめ、条件分岐は状態によって処理を変え、繰り返しは複数の投稿などへ同じ処理を行います。
- 変数:サイト名や取得した投稿などを一時的に持つ
- 配列:メニュー項目や投稿一覧など複数の値を扱う
- 条件分岐:画像がある場合だけ表示する
- 繰り返し:取得した投稿を1件ずつHTMLへ出力する
- 関数:同じ処理を名前で呼び出せる形へまとめる
WordPressテーマでは、PHPの文法だけでなくWordPressが用意した関数を組み合わせます。最初から独自処理を増やさず、目的に合うテンプレートタグやAPIがないか確認してください。
PHPの処理と表示を分ける
次の画像は、「PHPの処理と表示を分ける」で扱うコードや構成をブラウザで表示した結果です。

<?php
$title = '会社概要';
?>
<h1><?php echo esc_html($title); ?></h1>条件によって表示を変える
次の図では、「条件によって表示を変える」の仕組みや関係を確認できます。

<?php if (has_post_thumbnail()) : ?>
<?php the_post_thumbnail('large'); ?>
<?php else : ?>
<p>画像はありません。</p>
<?php endif; ?>複数の値を繰り返す
次の図では、「複数の値を繰り返す」の仕組みや関係を確認できます。

<?php foreach ($items as $item) : ?>
<li><?php echo esc_html($item); ?></li>
<?php endforeach; ?>PHPとHTMLを混在させるときの読み方
テーマファイルでは、HTMLの途中でPHPを開始し、値の出力や条件分岐を行います。PHPの開始と終了、丸括弧、波括弧、セミコロンの対応を1つずつ確認してください。
大きな処理をテンプレートへ直接書き続けると、HTMLの構造が読みにくくなります。再利用する処理は関数へ分け、表示に必要な最小限の処理をテンプレートへ残します。
表示する値を安全に扱う
データベースや入力欄から取得した値をHTMLへ出力するときは、表示する場所に合わせてエスケープします。エスケープは、文字をHTMLやURLとして安全に表示できる形へ変換する処理です。
- 文章として表示する値は
esc_html() - HTML属性の値は
esc_attr() - URLは
esc_url() - 翻訳対象の文章は翻訳関数と組み合わせる
入力値を保存する前に不要な文字や形式を整える処理はサニタイズと呼びます。出力時のエスケープとは役割が違うため、どちらか一方だけで済ませません。
出力する値をエスケープする
- 通常の文字列は
esc_html() - 属性値は
esc_attr() - URLは
esc_url() - 翻訳可能な固定文言は
esc_html_e()などを使う
エラーが起きたときの確認順序
- 直前に変更した行を確認する
- エラー文に表示されたファイル名と行番号を確認する
- 括弧、引用符、セミコロンの閉じ忘れを確認する
- 呼び出した関数名と引数を公式ドキュメントで確認する
- 変更前へ戻し、少しずつ追加して原因を絞る
エラー表示はローカル環境で確認し、本番サイトで訪問者へ詳細を表示しません。エラー文にはサーバー内のパスなどが含まれる場合があるためです。