「PHPって聞くと難しそうで、手を出しづらい……」
「WordPressのテーマ編集で『functions.php』を触るべきか迷っている」
「プラグイン作成に挑戦したいけど、どこから始めればいいの?」
「PHPのバージョンアップが不安で、サイトが壊れないか心配……」
こんな悩みを抱えている方も多いのではないでしょうか?
本記事では、PHPの基礎知識からスタートし、WordPressでの実践的なカスタマイズ手法、さらに運用時の注意点までをステップごとに丁寧に解説します。
初心者の方にもわかりやすいよう、コード例やポイント解説を交えつつ、安心して学べる構成になっていますので、ぜひ最後までご覧ください!😊
PHPの基礎知識
PHPとは何か
PHPはサーバー側で動作するスクリプト言語で、Webページの動的生成に広く使われています。
- 誕生:1995年にRasmus Lerdorf氏が開発
- 特徴
- HTMLに直接埋め込める
- 多くのWebサーバー・OSと互換性あり
- 豊富なライブラリとフレームワークが存在
メリット
- 手軽さ:HTMLと同じファイル内でコードを書ける ✏️
- コミュニティ:巨大なユーザーコミュニティで情報が豊富 🌐
- コスト:オープンソースで無料
WordPressとの親和性
WordPressは内部でPHPを駆使して動作しており、テーマやプラグインの多くがPHPで開発されています。
- ページの骨組みや投稿データの取得
- 独自機能の追加(ウィジェットやショートコードなど)
主要バージョンの特徴比較(PHP 5/7/8)
以下の表で、PHP 5、7、8 の主な違いをまとめました。
| 項目 | PHP 5 | PHP 7 | PHP 8 |
|---|---|---|---|
| リリース年 | 2004年 | 2015年 | 2020年 |
| サポート期限 | 終了(2018年) | 終了(2021年) | 2023年以降サポート継続中 |
| パフォーマンス | 🐢 (比較的遅め) | ⚡️ (約2倍高速化) | 🚀 (さらに高速&JIT導入) |
| メモリ使用量 | 多め | 少なめ | より効率的 |
| 主な新機能 | — | 型宣言(strict types)、匿名クラス | JITコンパイラ、マッチ式、属性(Attributes) |
| 互換性注意点 | レガシーコード多数 | PHP 5系からの移行で注意が必要 | PHP 7系からの非互換変更あり |
ポイント解説
- 速度向上:PHP 7で大幅に改善され、PHP 8ではさらにJIT(Just In Timeコンパイル)で高速化😊
- 型安全性:PHP 7以降、関数の引数や戻り値に型宣言が可能に
- 最新機能:PHP 8ではマッチ式や属性が導入され、コードの可読性・保守性が向上
これらを踏まえ、WordPressサイトではサポート期限内かつ安定したパフォーマンスを確保できるバージョンを選択しましょう。
WordPressにおけるPHPの役割
テーマで使われるPHPの仕組み
WordPressテーマでは、PHPがHTMLテンプレートに動的コンテンツを埋め込む役割を担います。
- テンプレートタグ:
<?php get_header(); ?>や<?php the_content(); ?>などで共通部分や投稿内容を呼び出し - ループ処理:
have_posts()→the_post()の流れで複数投稿を繰り返し表示 - 条件分岐:トップページやアーカイブ、固定ページごとに表示を切り替え
- 例:
is_front_page()、is_single()など
- 例:
- メリット
- 再利用性:ヘッダー・フッターを1箇所で管理できる 🔄
- メンテナンス性:ファイル構造が明確で、修正箇所が見つけやすい 🔍
| 機能 | PHPの役割 |
|---|---|
| ヘッダー・フッター呼び出し | get_header() / get_footer() |
| 投稿ループ | while ( have_posts() ) : the_post(); |
| 条件付き表示 | if ( is_page('about') ) { … } |
プラグイン開発におけるPHPの活用
プラグインではフック(Hooks)を使って、WordPressの動作を自由に拡張します。
- アクションフック(Action)
- 例:
add_action( 'init', 'my_custom_init' ); - サイト初期化時に独自処理を追加 👍
- 例:
- フィルターフック(Filter)
- 例:
add_filter( 'the_content', 'modify_content' ); - 投稿本文に自動で目次を挿入 ✨
- 例:
- ショートコードの登録
function my_button_shortcode() {
return '<button class="my-btn">Click!</button>';
}
add_shortcode( 'my_button', 'my_button_shortcode' );
`
- 設定ページの作成
- 管理画面に設定画面を追加し、ユーザーがオプションを変更可能に 🔧
コア機能への拡張例
WordPress本体の機能をPHPで広範囲にカスタマイズできます。
- カスタム投稿タイプ
function create_portfolio_cpt() {
register_post_type( 'portfolio', [
'label' => 'ポートフォリオ',
'public' => true,
'has_archive' => true,
] );
}
add_action( 'init', 'create_portfolio_cpt' );
- REST APIエンドポイントの追加
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/data', [
'methods' => 'GET',
'callback' => 'get_my_data',
] );
} );
- ユーザー権限のカスタマイズ
- 特定のユーザーにのみアクセス権限を付与 🛡️
- WP-CLIコマンドの拡張
- ターミナルから独自コマンドを実行し、バッチ処理を自動化 ⚙️
これらの手法を組み合わせることで、テーマやプラグインの枠を超えた独自機能をWordPressに組み込めます。
PHPコードの書き方と配置場所
ファイル拡張子とタグの扱い(.php/.html)
PHPを動かすには、拡張子を.phpにする必要があります。
- .htmlファイル:サーバーはそのまま返却
- .phpファイル:
<?php … ?>内のコードを実行し、結果をHTMLとして出力
<!-- example.html はPHP処理されない -->
<html>
<body>
<?php echo "こんにちは"; ?> <!-- 何も出力されない -->
</body>
</html>
`
<!-- example.php はPHPを実行 -->
<html>
<body>
<?php echo "こんにちは"; ?> <!-- 「こんにちは」が表示される -->
</body>
</html>
基本文法:コメント・文終端・文字列操作
コメントの書き分け(1行/複数行)
//または#:1行コメント/* … */:複数行コメント
// これは1行コメント
# こちらも1行コメント
/*
これは
複数行コメント
*/
クォートと変数展開の違い
| クォート種類 | 変数展開 | 特徴 |
|---|---|---|
| シングルクォート | されない | エスケープが少ない ✨ |
| ダブルクォート | 変数を埋め込める | 文字列中に $name が展開 OK 🥳 |
$name = "太郎";
echo 'こんにちは, $name'; // こんにちは, $name
echo "こんにちは, $name"; // こんにちは, 太郎
文字列の表示と連結
- 表示:
echo/print - 連結:
.(ドット演算子)
echo "Hello" . " World!"; // Hello World!
データ構造:変数・配列・連想配列の宣言と出力
- 変数:
$var = 値; - 配列:
$arr = [1, 2, 3]; - 連想配列:
$assoc = ['key' => 'value'];
$fruit = "リンゴ";
$colors = ["赤", "青", "緑"];
$user = ['name' => '花子', 'age' => 28];
// 出力
echo $fruit; // リンゴ
print_r($colors); // Array ( [0] => 赤 [1] => 青 [2] => 緑 )
var_dump($user['name']); // string(6) "花子"
制御構文:条件分岐とループ処理
if/elseif/else の書式と比較演算子・論理演算子
if ($age >= 18 && $age < 65) {
echo "働き盛りです😊";
} elseif ($age >= 65) {
echo "お疲れ様でした🎉";
} else {
echo "まだまだこれから!";
}
| 比較演算子 | 意味 |
|---|---|
== | 値が等しい |
=== | 型と値が厳密に等しい |
!= | 値が異なる |
> / < | 大小比較 |
| 論理演算子 | 意味 |
|---|---|
&& | かつ (AND) |
|| | または (OR) |
! | 否定 (NOT) |
while と foreach の使い方とWordPress応用例
- while:条件が真の間、繰り返し処理
- foreach:配列やオブジェクトの要素を順番に処理
// WPループ例
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
the_title('<h2>','</h2>');
}
}
// foreach例
$users = get_users();
foreach ( $users as $user ) {
echo $user->display_name . "<br>";
}
コードを記述する場所:functions.php・テンプレート・プラグインファイル
- functions.php:テーマ全体で使う関数やフィルタを登録
- テンプレートファイル:header.php、single.php など、ページごとの構造を定義
- プラグインファイル:独立した機能を持つコード一式を
/wp-content/plugins/内に配置
💡 Tip:直接本番環境のファイルを編集せず、テスト環境や子テーマで動作確認を行いましょう!
PHPファイルの編集手順
管理画面上のテーマエディター利用法
WordPress管理画面だけで手軽にPHPファイルを編集できる方法です。
- 手順
- 管理画面左メニューの「外観」→「テーマファイルエディター」を選択
- 右側のファイル一覧から編集したい .php ファイル(例:
header.php、functions.php)をクリック - エディター上でコードを修正し、画面下部の「ファイルを更新」ボタンを押す
- メリット
- 💨 ブラウザだけで完結
- 初心者でも迷わずアクセスできる
- 注意点
- ⚠️ 直接編集すると即時反映され、エラーが出るとサイトが真っ白になる恐れあり
- バックアップや子テーマでの編集を強く推奨
FTP/SFTPでのファイル更新方法
サーバーに直接接続して安全にファイルを編集・反映する手順です。
| 項目 | 設定例 |
|---|---|
| 接続方式 | SFTP(推奨) / FTP |
| ホスト名 | example.com |
| ポート番号 | 22(SFTP) / 21(FTP) |
| ユーザー名 | サーバー契約時に指定したユーザー |
| パスワード | サーバーのパスワード |
- 接続設定
- FTPクライアント(FileZilla、WinSCP など)を起動し、上記情報を入力
- ローカルへのダウンロード
/wp-content/themes/あなたのテーマ/フォルダを開き、編集したい .php ファイルをローカルにダウンロード
- ローカルで編集
- VS Code などのエディターでコードを修正
- ローカル環境で動作確認ができれば◎
- サーバーへのアップロード
- 修正したファイルをサーバー上の同じ場所にアップロードし、上書き保存
- 動作確認
- ブラウザで該当ページをリロードし、問題なく表示されるかチェック ✅
💡 Tip:編集前に必ずローカル・サーバー双方のバックアップをとり、エラー発生時にすぐ復旧できる体制を整えておきましょう。
WordPressカスタマイズ実践例
テーマの見た目・機能調整
テーマのデザインや動作を手軽に変更する方法です。
- カスタマイザーを活用
- 「外観」→「カスタマイズ」で色・フォント・レイアウトを直感的に設定🎨
- 追加CSS欄にコードを追記して細かい調整も可能
/* ヘッダー背景色を変更 */ header.site-header { background-color: #ff6347; } - functions.phpで機能追加
- ヘッダーにスクリプトを挿入する例
php function add_custom_script() { wp_enqueue_script( 'my-script', get_stylesheet_directory_uri() . '/js/custom.js', [], null, true ); } add_action( 'wp_enqueue_scripts', 'add_custom_script' ); - ポイント:コードは子テーマのfunctions.phpに書くと、テーマアップデート後も安全🔒
- ヘッダーにスクリプトを挿入する例
オリジナルプラグインの作成・改良
独自機能をプラグイン化すれば、テーマ変更時にも持ち運びOK!
| フォルダ構成 | 説明 |
|---|---|
my-plugin/ | プラグインルートフォルダ |
my-plugin/my-plugin.php | メインファイル(ヘッダー情報必須) |
my-plugin/includes/ | 追加クラスや関数を分割して管理 |
- プラグインヘッダー記述(
my-plugin.php)
<?php
/**
* Plugin Name: My Custom Plugin
* Description: サイトに便利な機能を追加
* Version: 1.0
* Author: あなたの名前
*/
`
- フックで処理を追加
// 管理画面のフッターにメッセージ表示
function my_admin_footer_text() {
echo 'このサイトは <strong>My Custom Plugin</strong> で強化されています 😊';
}
add_filter( 'admin_footer_text', 'my_admin_footer_text' );
- プラグイン設定画面
add_menu_page()で独自メニューを追加し、settings_fields()/register_setting()でオプションを保存🔧
記事テンプレートやウィジェットへの組み込み
投稿やウィジェットエリアにオリジナル要素を配置する方法です。
- テンプレートパーツ
get_template_part( 'template-parts/content', 'custom' );でパーツ化template-parts/content-custom.phpに専用レイアウトを記述
- ショートコードで本文に挿入
function banner_shortcode() {
return '<div class="custom-banner">ようこそ!</div>';
}
add_shortcode( 'welcome_banner', 'banner_shortcode' );
* 投稿本文に `[welcome_banner]` と入力するだけで挿入OK 👍
- ウィジェット登録
class My_Custom_Widget extends WP_Widget {
public function __construct() {
parent::__construct( 'my_widget', 'カスタムウィジェット' );
}
public function widget( $args, $instance ) {
echo $args['before_widget'];
echo '<p>ここに自由なHTML/PHPを記述</p>';
echo $args['after_widget'];
}
}
function register_my_widget() {
register_widget( 'My_Custom_Widget' );
}
add_action( 'widgets_init', 'register_my_widget' );
- 外観 → ウィジェットから配置・設定が可能🌟
これらの手法を組み合わせて、自分だけのWordPressサイトを作り上げましょう!
PHPバージョン管理とアップデート
推奨バージョンの確認方法(サーバー・phpinfo)
- サーバー管理画面でチェック
- レンタルサーバーの「PHP切替」や「環境設定」に表示される現在のバージョンを確認 ✅
- 最新の推奨バージョンが選択可能かどうかもここでわかります
- phpinfo() で詳細を見る
<?php
// テーマの header.php など、一時的に挿入してブラウザで確認
phpinfo();
`
- ブラウザに表示される「PHP Version」の項目をチェック
- モジュールや拡張機能の有無も同時に把握できる 🎯
互換性チェックと事前バックアップ
PHPを上げる前に、サイトが正常に動くかを確認するための準備です。
| 項目 | 内容 |
|---|---|
| テーマ互換性 | 子テーマ含めて最新WordPress&PHPで動作するか開発者サイトで調査 |
| プラグイン互換性 | 各プラグインの更新履歴や公式ページで対応バージョンを確認 |
| バックアップ方法 | – プラグイン(BackWPup, UpdraftPlusなど) – サーバー標準機能 – 手動でデータベース・ファイルを取得 |
💡 Tip:バックアップは「ファイル+データベース」の両方を必ず保存しましょう。
テスト環境での動作検証ステップ
- ステージング環境の用意
- レンタルサーバーのステージング機能を利用、またはローカル開発環境(Local, XAMPPなど)を構築
- 環境の複製
- 本番サイトのデータベースとファイルをステージングにインポート
- PHPバージョン切替
- ステージング上で該当バージョンを適用し、エラーが出ないかチェック 🔍
- 主要ページ・機能の動作確認
- トップページ/投稿ページ/お問い合わせフォームなど、代表的なページをひと通り操作
- プラグインの管理画面やウィジェットもテスト
本番環境への反映と問題時のロールバック
- 本番サーバーでバージョン切り替え
- サーバー管理画面やSSHコマンドでPHPのバージョンを更新
- 簡易チェック
- サイト全体を一巡りして致命的なエラーがないか確認 ✅
- 問題発生時の対応
- ロールバック手順:
- 管理画面またはSSHで元のPHPバージョンに戻す
- 必要に応じてバックアップデータをリストア
- エラーログを確認し、対応策を検討
- エラーログの活用:
error_logやサーバー側のログで原因を特定 🛠️
- ロールバック手順:
🔒 注意:何かあったときにすぐ戻せるよう、本番反映前には必ず「バージョン切り替え手順」をメモしておきましょう。
開発時の注意事項とベストプラクティス
定期的なバックアップと更新管理
- 自動バックアップ設定
- プラグイン(例:UpdraftPlus)やサーバー機能で毎日・毎週などスケジュールを組む 📅
- バックアップ対象:データベース+wp-content フォルダ
- バージョン管理の導入
- Gitでテーマ・プラグインのソースコードを管理
- 変更履歴をコミットメッセージに残し、何を・誰が・いつ修正したか明確に
- 定期的な更新チェック
| 更新対象 | 推奨頻度 |
|---|---|
| WordPress本体 | 週1回 |
| プラグイン | 月1回 |
| テーマ | 月1回 |
💡 Tip:更新後は必ずサイト全体をサクッとチェックし、予期せぬ不具合にすぐ対応できるようにしましょう。
テストサイトでの動作確認の徹底
- ステージング環境を用意
- 本番サイトと同じ環境(PHPバージョン・プラグイン構成)を再現
- テストフローの作成
- 新機能・更新をステージングで適用
- 主要ページ(トップ/投稿/フォーム)を網羅的に操作
- プラグイン設定画面・ウィジェットも忘れず確認
- 自動テストの活用
- PHPUnitでユニットテストを実装
- WP CLI を使ったスクリプトテストでメンテやリグレッションを防止 🤖
🔍 ポイント:テスト完了後に「テスト完了報告」を残し、いつでも誰でも検証状態がわかるようにしておくと安心です。
コードの可読性向上とセキュリティ対策
| 分野 | 対策例 |
|---|---|
| コード可読性 | – 命名規則(camelCase や snake_case)を統一 – 適切なコメント・ドキュメンテーション – PSR-12準拠のコードフォーマット |
| セキュリティ対策 | – 入力値の検証・エスケープ(sanitize_text_field(), esc_html())– Nonces の利用でCSRFを防ぐ – 最小権限でユーザー権限を設定 – 不要なeval()や外部ライブラリの追加を控える |
- コードレビューの実施
- Pull Requestを活用し、チームで必ずレビューを行う
- 静的解析ツールの導入
- PHP_CodeSnifferやPHPStanで潜在的なバグを早期発見
🔒 注意:セキュリティは一度設定すれば終わりではありません。定期的なチェックとアップデートを怠らないようにしましょう。
まとめ
- PHPの全体像を理解したことで、WordPressの内部仕組みがスッキリ見えるようになります。
- テーマ編集・プラグイン開発・コア機能拡張など、目的に応じたカスタマイズ方法が身につきました。
- ファイル編集手順・バージョン管理・テスト運用のベストプラクティスを押さえれば、トラブルを未然に防ぎつつ安全にサイト運営が可能です。
WordPressとPHPの組み合わせは、自由度の高いサイト構築を実現する強力な武器です。
この記事を参考に、自分だけのオリジナル機能やデザインをどんどん試してみてください。
次のステップとして、実際にコードを書いて動かす経験を積むことで、スキルは飛躍的にアップします。
✅ まずはローカル環境で小さなカスタマイズから始めて、慣れてきたら本番環境にもチャレンジしてみましょう!

