PHPとは、Webサーバーの上で動き、HTMLを組み立ててブラウザへ返すプログラミング言語のことです。WordPressの本体とテーマはPHPで書かれており、single.php や functions.php を開いたときに並んでいる <?php から始まるコードがそれに当たります。
WordPressでサイトを作っていると、PHPに触れる場面は避けられません。テーマのテンプレートを少し直したい、プラグインの説明どおりにコードを貼りたい。ところが入門書の多くはPHPで一からWebアプリを作る前提で書かれていて、「目の前のテンプレートが読めるようになりたい」という目的に対しては遠回りになりがちです。
この記事では、PHPでできることを用途別に整理し、JavaScriptとの構文の違いを表で示したうえで、基礎文法を6つの練習問題で確かめます。練習問題はどれもコードを読んで出力を当てる形式です。PHPはブラウザだけでは動かないため、まず「読める」ところから始めるのが近道になります。同じ形式の問題を20問解ける練習アプリも用意しました。
PHPとは?HTMLの中で動くサーバー側の言語
PHPは1995年に登場したサーバーサイドの言語です。いちばんの特徴は、HTMLの中にそのまま書けることです。<?php と ?> で囲んだ部分だけがサーバーで実行され、その結果がHTMLに埋め込まれてブラウザに届きます。
<h1><?php echo "こんにちは"; ?></h1>
<p>今日は<?php echo date("n月j日"); ?>です。</p>ブラウザに届くのは <h1>こんにちは</h1> のような実行後のHTMLだけで、PHPのコード自体は見えません。JavaScriptがブラウザの中で動くのに対して、PHPはブラウザに届く前にサーバーで動く。この違いを押さえておくと、この先の説明がすべて読みやすくなります。
利用規模も大きい言語です。W3Techsの調査(2026年9月時点)によると、サーバー側の言語が判明しているWebサイトの69.9%がPHPを使っています。その大きな理由がWordPressで、Web制作の現場でPHPを読む機会が多いのはこのためです。
PHPでできること
PHPが得意なのは、アクセスのたびに内容が変わるページを作ることです。Web制作者がよく出会う用途を4つに絞って紹介します。
WordPressのテーマを作る・直す
記事一覧・記事ページ・ヘッダーといったテーマのテンプレートは、すべてPHPファイルです。投稿データを取り出してHTMLに流し込む処理をPHPが担っています。テンプレートの役割は archive.phpの使い方とカスタマイズ で具体的に解説しています。
お問い合わせフォームを作る
フォームに入力された内容を受け取り、チェックしてメールで送る処理もPHPの定番です。入力値は $_POST で受け取ります。安全な作り方は PHPメールフォームの作り方 にまとめています。
ログイン機能を作る
会員ページのように「ログインした人だけに見せる」仕組みは、セッションとパスワードのハッシュ化で作ります。手順は PHPログイン機能の作り方 で解説しています。
データベースと連携する
商品一覧やお知らせのように、データベースに保存した情報を読み書きするのもPHPの役割です。登録・取得・更新・削除の基本は PHPでMySQLを操作する方法 で確認できます。
| やりたいこと | PHPが担う処理 | 主に使う機能 |
|---|---|---|
| テーマを直す | 投稿データをHTMLに流し込む | テンプレートタグ・ループ |
| フォームを作る | 入力の受け取り・チェック・送信 | $_POST・mb_send_mail() |
| ログインを作る | 本人確認と状態の保持 | session_start()・password_hash() |
| DBと連携する | データの読み書き | PDO |
JavaScriptとPHPの違いを構文で見る
JavaScriptを書いたことがあれば、PHPの考え方はほぼそのまま使えます。変わるのは書き方です。特に間違えやすいものを表にしました。
| やりたいこと | JavaScript | PHP |
|---|---|---|
| 変数を作る | let name = "Taro"; | $name = "Taro"; |
| 文字列をつなぐ | "Hello, " + name | "Hello, " . $name |
| 文字列に変数を埋め込む | `Hello, ${name}` | "Hello, {$name}" |
| 画面に出す | console.log(name) | echo $name; |
| 配列の要素数 | items.length | count($items) |
| キーつきのデータ | { name: "Taro" } | ["name" => "Taro"] |
| 動く場所 | ブラウザ | サーバー |
いちばん大きな違いは、変数名の頭に必ず $ が付くことと、文字列の連結が + ではなく .(ドット)であることです。また、PHPでは文の終わりのセミコロンを省略できません。書き忘れるとその場でエラーになります。
PHPを動かす環境を用意する
PHPのコードを実行するには、PHPが入ったサーバー環境が必要です。HTMLファイルのようにダブルクリックしてブラウザで開いても、PHPの部分は動きません。
パソコンにローカル環境を作る
もっとも手軽なのは、PHP・Webサーバー・データベースをまとめて入れられるMAMPやXAMPPです。手順は MAMPとXAMPPの導入方法 で解説しています。チームで同じ環境をそろえたい場合は Docker Composeで作るPHP・MySQLのローカル開発環境 が向いています。
PHP単体で動かしてみる
PHPだけがインストールされていれば、ターミナルからファイルを直接実行できます。PHPには開発用のWebサーバーも付属しているので、フォルダを指定するだけでブラウザから確認できます。
# ファイルを実行して結果をターミナルに出す
php hello.php
# 開発用サーバーを起動(http://localhost:8000 で確認)
php -S localhost:8000とはいえ、文法を覚える段階では環境構築を後回しにしても問題ありません。この記事の練習問題とアプリは、コードを読んで結果を予想する形式なので、何もインストールせずに始められます。
基礎文法①:出力・変数・文字列
画面への出力には echo を使います。変数は $ で始まる名前に値を代入すると作られ、let や const のような宣言は要りません。
<?php
$name = "花子";
$age = 28;
echo $name . "さんは" . $age . "歳です";
echo "\n";
echo "{$name}さんは{$age}歳です";どちらも「花子さんは28歳です」と出力されます。ダブルクォートの中では変数がそのまま展開されるため、2つ目の書き方のほうが読みやすくなります。"\n" は改行です。
練習問題1:echo と文字列の連結
次のコードを実行すると、何が出力されるでしょう?
<?php
$name = "Taro";
echo "Hello, " . $name . "!";答え:Hello, Taro!
. で3つの文字列がつながります。JavaScriptの感覚で + を書くと、PHPでは数値の足し算として扱われ、意図した結果になりません。
練習問題2:シングルクォートとダブルクォート
同じ変数を2種類のクォートで囲んでいます。出力はどうなるでしょう?
<?php
$item = "りんご";
echo '好物は$itemです';
echo "\n";
echo "好物は{$item}です";答え:1行目は「好物は$itemです」、2行目は「好物はりんごです」
変数が展開されるのはダブルクォートの中だけです。シングルクォートは書いた文字がそのまま出ます。テンプレートの中で変数が表示されないときは、まずクォートの種類を確認してください。
基礎文法②:計算と条件分岐
四則演算の記号はJavaScriptと同じです。条件分岐も if ・ elseif ・ else と、波かっこを使った見慣れた形で書けます。
<?php
$price = 1200;
$tax = $price * 0.1;
if ($price + $tax >= 1000) {
echo "送料無料";
} else {
echo "送料500円";
}JavaScriptの else if はPHPでは elseif と1語で書くのが一般的です(else if と2語で書いても動きます)。
練習問題3:割り算と余り
3種類の割り算を並べています。それぞれ何が出力されるでしょう?
<?php
echo 7 / 2;
echo "\n";
echo intdiv(7, 2);
echo "\n";
echo 7 % 2;答え:3.5、3、1
/ は割り切れなければ小数を返します。整数の商がほしいときは intdiv()(小数点以下を切り捨て)、余りは % です。ページ数の計算などで使い分けます。
練習問題4:if / elseif / else
$score が75のとき、何が出力されるでしょう?
<?php
$score = 75;
if ($score >= 80) {
echo "A";
} elseif ($score >= 70) {
echo "B";
} else {
echo "C";
}答え:B
条件は上から順に調べられ、最初に当てはまった1つだけが実行されます。75は80未満で70以上なので「B」です。
基礎文法③:繰り返しと配列
配列は [] で作り、キーつきの配列(連想配列)は キー => 値 の形で書きます。配列を順に処理するには foreach を使います。WordPressのテンプレートでも最もよく見る構文です。
<?php
$prices = ["コーヒー" => 400, "紅茶" => 350];
foreach ($prices as $name => $price) {
echo "{$name}:{$price}円\n";
}「コーヒー:400円」「紅茶:350円」の2行が出力されます。as $キー => $値 と書くとキーと値を同時に受け取れます。値だけでよければ foreach ($prices as $price) と書きます。
練習問題5:for 文
繰り返しのたびに数字とカンマを出しています。出力はどうなるでしょう?
<?php
for ($i = 1; $i <= 3; $i++) {
echo $i . ",";
}答え:1,2,3,
$i <= 3 なので3も含みます。カンマは毎回付けているので、最後の3の後ろにも残ります。末尾のカンマを付けたくないときは、配列にまとめて implode(",", $配列) でつなぐのが定番です。
練習問題6:配列への追加と取り出し
末尾に要素を追加してから、要素数と2番目の要素を出しています。出力はどうなるでしょう?
<?php
$fruits = ["apple", "banana", "grape"];
$fruits[] = "melon";
echo count($fruits) . " " . $fruits[1];答え:4 banana
$fruits[] = … は配列の末尾への追加です。要素数は count() で4になります。番号は0から数えるので、[1] は2番目のbananaです。
WordPressのテンプレートを読んでみる
ここまでの文法で、WordPressのテンプレートがかなり読めるようになっています。記事一覧を出す典型的なコードを見てみましょう。
<?php if ( have_posts() ) : ?>
<ul>
<?php while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php endif; ?>見慣れない点は2つです。1つは if (…): 〜 endif; のように、波かっこの代わりにコロンと end〜 を使う書き方です。HTMLの中にPHPを細かく埋め込むとき、どこでブロックが閉じるのかを読みやすくするための書き方で、意味は波かっこと同じです。
もう1つは、have_posts() や the_title() のようなWordPressが用意した関数(テンプレートタグ)です。
| 関数 | 役割 |
|---|---|
have_posts() | 表示する投稿が残っているかを true / false で返す |
the_post() | 次の投稿を「いま扱う投稿」として準備する |
the_permalink() | いま扱っている投稿のURLを出力する |
the_title() | いま扱っている投稿のタイトルを出力する |
つまりこのコードは、「投稿があれば ul を出し、投稿が残っている間は1件ずつリンクつきのタイトルを li で出す」と読めます。while と if という基本の構文の上に、WordPressの関数が乗っているだけです。
つまずきやすい3つのポイント
1. == と === の違い
== は型をそろえてから比べるため、文字列の "10" と数値の 10 が等しいと判定されます。=== は型まで一致しないと等しくなりません。フォームやURLから受け取る値はすべて文字列なので、比較には === を使うのが安全です。
<?php
var_dump("10" == 10); // bool(true)
var_dump("10" === 10); // bool(false)2. 日本語の文字数
strlen() が返すのは文字数ではなくバイト数です。UTF-8の日本語は1文字が3バイトなので、「こんにちは」は15と数えられます。抜粋を何文字で切るといった処理では、文字数を返す mb_strlen() や mb_substr() を使います。
<?php
$text = "こんにちは";
echo strlen($text); // 15
echo "\n";
echo mb_strlen($text); // 53. 出力するときのエスケープ
ユーザーが入力した文字をそのまま echo すると、<script> のようなタグまでHTMLとして動いてしまいます(XSS)。外から来た値を出力するときは、htmlspecialchars() で記号を文字参照に変えてから出します。WordPressでは同じ役割を esc_html() が担います。
<?php
$input = '<b>太字</b>';
echo htmlspecialchars($input); // <b>太字</b>次に何を学ぶか
基礎文法の次は、実際のコードを読む量を増やすのがおすすめです。書く練習よりも先に読む力が付くと、WordPressのテーマやプラグインの説明に載っているコードが意味を持って見えるようになります。
実務でよく出てくる $_POST やデータベース接続まで含めた読み方は、実コードで学ぶPHPの読み方 で解説しています。サーバー側の技術の全体像をつかみたい場合は バックエンドとは?サーバー・DB・APIの全体像 が地図になります。
| やりたいこと | 次に読む記事 |
|---|---|
| テーマのテンプレートを直したい | archive.phpの使い方・single.phpの使い方 |
| フォームを作りたい | PHPメールフォームの作り方 |
| 会員機能を作りたい | PHPログイン機能の作り方 |
| データベースを扱いたい | PDOでCRUDを実装する方法 |
その前に、文法を目で覚えておくと先が楽になります。練習アプリには、この記事の6問に加えて、== と ===、match 式、array_filter() のキーの扱い、参照渡し、テンプレートの読み解きまで含めた20問を用意しています。
よくある質問
Q. PHPとJavaScriptは、どちらを先に学ぶべきですか?
Web制作をしているなら、画面の動きに直結するJavaScriptを先に学ぶのが一般的です。ただしWordPressのテーマを扱う仕事が中心なら、PHPのテンプレートを読める力のほうが先に必要になる場面も多くあります。変数・条件分岐・繰り返しの考え方は共通なので、どちらから始めてももう一方の習得は早くなります。
Q. WordPressを使うだけでもPHPの知識は必要ですか?
管理画面で記事を書き、既存のテーマをそのまま使うだけなら必須ではありません。テンプレートの表示を変えたい、functions.php にコードを追加したいといった段階になると必要になります。この記事の範囲の文法を読めるだけでも、貼り付けるコードが何をしているかを判断できるようになります。
Q. PHPのバージョンはどれを使えばよいですか?
WordPressの公式要件では、PHP 8.3以上が推奨されています(2026年9月時点)。新しく環境を作るなら8系の最新に近いバージョンを選んでください。PHP 8で入った match 式などは古いバージョンでは動かないため、解説記事を読むときは対象のバージョンにも注意が必要です。
Q. インストールせずに練習することはできますか?
コードを読む練習であればできます。本記事の練習アプリは、PHPのコードを読んで出力を4択で当てる形式なので、ブラウザだけで進められます。実際に書いて動かす段階になったら、MAMPやXAMPPなどでローカル環境を用意してください。
Q. 基礎文法を覚えるのにどのくらいかかりますか?
JavaScriptを書いた経験がある人なら、この記事の範囲は数時間で一通り読めます。考え方を新しく学ぶのではなく、$ や . といった書き方を置き換える作業が中心だからです。読んだあとに練習問題で出力を予想し、答え合わせまでしておくと定着が早くなります。
Q. PHPの仕事は今もありますか?
あります。W3Techsの調査ではサーバー側の言語が判明しているWebサイトの約7割がPHPを使っており、WordPressの制作・保守を中心に需要が続いています。PHP自体も8系で型の扱いや構文の改良が続いており、公式に保守されているバージョンが複数あります。
ここまでの内容を確かめられるよう、記事の6問を含む20問をブラウザで解ける練習アプリを用意しました。答えを選ぶと、その場で正誤と解説が表示されます。
