LESSON / WP LOAD

WordPressテーマで使うPHPの基本

PHPの開始・終了、変数、条件分岐、繰り返し、関数、エスケープをWordPressテーマに必要な範囲で学びます。

目安 90分 コース進捗 0 / 17

GOAL

このレッスンでできるようになること

  • PHPをHTML内へ安全に書ける
  • 条件分岐と繰り返しの基本を読める
  • WordPress関数の出力をエスケープできる

WordPressテーマでは、HTMLの中でPHPを使い、投稿や設定の内容を表示します。最初から複雑なプログラムを作るのではなく、テーマで頻繁に読む構文へ絞って確認します。

PHPが実行される場所

PHPのコードはブラウザへそのまま届かず、サーバーで実行された結果のHTMLが返されます。

Webサーバー内のPHPがデータを処理して完成したHTMLをブラウザへ返す流れ
Webサーバー内のPHPがデータを処理して完成したHTMLをブラウザへ返す流れ

PHPはWebサーバー側で実行されるプログラミング言語です。ブラウザがPHPのコードを直接読むのではなく、サーバーがPHPを実行して生成したHTMLを受け取ります。

そのため、ブラウザの「ページのソースを表示」ではPHPのコードは見えません。表示されるのは実行後のHTMLです。

変数・配列・条件分岐・繰り返し

変数は、後で使う値へ名前を付けて保存する仕組みです。配列は複数の値をまとめ、条件分岐は状態によって処理を変え、繰り返しは複数の投稿などへ同じ処理を行います。

  • 変数:サイト名や取得した投稿などを一時的に持つ
  • 配列:メニュー項目や投稿一覧など複数の値を扱う
  • 条件分岐:画像がある場合だけ表示する
  • 繰り返し:取得した投稿を1件ずつHTMLへ出力する
  • 関数:同じ処理を名前で呼び出せる形へまとめる

WordPressテーマでは、PHPの文法だけでなくWordPressが用意した関数を組み合わせます。最初から独自処理を増やさず、目的に合うテンプレートタグやAPIがないか確認してください。

PHPの処理と表示を分ける

次の画像は、「PHPの処理と表示を分ける」で扱うコードや構成をブラウザで表示した結果です。

「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()などを使う

エラーが起きたときの確認順序

  1. 直前に変更した行を確認する
  2. エラー文に表示されたファイル名と行番号を確認する
  3. 括弧、引用符、セミコロンの閉じ忘れを確認する
  4. 呼び出した関数名と引数を公式ドキュメントで確認する
  5. 変更前へ戻し、少しずつ追加して原因を絞る

エラー表示はローカル環境で確認し、本番サイトで訪問者へ詳細を表示しません。エラー文にはサーバー内のパスなどが含まれる場合があるためです。

CHECK POINT

完了条件