2026年5月26日
2026年5月26日
WordPressプラグインのソースコードを確認する方法(管理画面・WordPress.org・WP-CLI)
プラグインの動きが気になるとき、セキュリティを確かめたいとき、カスタマイズの方法を探したいときは、ソースコードを読むのが近道です。WordPress のプラグインは PHP・JavaScript・CSS のファイルで配布されているので、特別な道具がなくても中身を見られます。
この記事では、ソースコードを確認する方法を「インストール前」と「インストール後」に分けて説明し、読むときに見るべき箇所を紹介します。WP-CLI の操作は WordPress 6.9 で確認しています(2026年11月時点)。
インストール前に確認する:WordPress.org
WordPress.org のプラグインディレクトリに載っているプラグインは、入れる前にコードを確認できます。
- プラグインのページ(
https://wordpress.org/plugins/スラッグ/)を開く - 「開発」(Development)の欄にある、コードの閲覧・SVN リポジトリ・開発ログへのリンクを使う
それぞれの URL は次の形です。akismet の部分を対象のプラグインのスラッグに置き換えてください。
| 用途 | URL |
|---|---|
| ブラウザーでコードを読む | https://plugins.trac.wordpress.org/browser/akismet/ |
| SVN リポジトリ | https://plugins.svn.wordpress.org/akismet/ |
| 変更の履歴(開発ログ) | https://plugins.trac.wordpress.org/log/akismet/ |
コードの閲覧画面では、開発中の trunk と、公開された各バージョンの tags/バージョン番号/ を見られます。実際に配布されているのは、readme.txt の Stable tag に書かれたバージョンです。
プラグインのページの「詳細を表示」(Advanced View)を開くと、過去のバージョンを選んでダウンロードできます。
試しに動かしてみたい場合は、ブラウザーの中で WordPress を動かす WordPress Playground が使えます。https://playground.wordpress.net/?plugin=スラッグ を開くと、そのプラグインを入れた使い捨ての WordPress が起動します。自分のサイトに影響を与えずに、画面やファイルを確認できます。
インストール後に確認する:管理画面
すでに入っているプラグインは、管理画面の「プラグインファイルエディター」で中身を見られます。メニューの場所は、使っているテーマで変わります。
- クラシックテーマ:「プラグイン」→「プラグインファイルエディター」
- ブロックテーマ:「ツール」→「プラグインファイルエディター」
右上の「編集するプラグインを選択」で対象を選ぶと、ファイルの一覧と中身が表示されます。
この画面は「見る」ためだけに使い、ここでの編集は避けてください。書き間違いでサイトが表示されなくなることがあり、プラグインを更新すると変更は上書きされて消えます。wp-config.php に define( 'DISALLOW_FILE_EDIT', true ); を書いているサイトや、サーバー会社の設定によっては、この画面自体が表示されません。
インストール後に確認する:サーバー上で読む
SSH が使えるなら、サーバー上のファイルを直接読むのが効率的です。プラグインは wp-content/plugins/スラッグ/ にあります。WP-CLI があれば、場所を調べるところから始められます。
# プラグインのディレクトリを調べる
wp plugin path akismet --dir
# バージョンや状態を確認する
wp plugin get akismet --fields=name,title,version,status
ファイルの構成を見て、メインのファイルと readme.txt から読みます。
cd "$(wp plugin path akismet --dir)"
# ファイルの一覧(tree が無い環境でも動く書き方)
find . -type f -name '*.php' | sort
# readme.txt の先頭に、対応する WordPress・PHP のバージョンなどが書かれている
head -20 readme.txt
メインのファイル(プラグインのフォルダーと同じ名前の PHP ファイルであることが多い)の先頭には、Plugin Name や Version、Requires PHP などのヘッダーがあります。そこから require や include で読み込まれるファイルをたどると、全体の構造がつかめます。
特定の機能を探すときは grep を使います。
# 関数やフックが定義・登録されている場所を探す
grep -rn "function akismet_" --include='*.php' . | head
grep -rn "add_action\|add_filter" --include='*.php' . | head -30
ファイルが改ざんされていないか確かめる:WP-CLI
WordPress.org で配布されているプラグインなら、wp plugin verify-checksums で、サーバー上のファイルが配布元のファイルと一致するかを確かめられます。
# 1つのプラグインを検証する
wp plugin verify-checksums akismet
# すべてのプラグインを検証する
wp plugin verify-checksums --all
一致すれば Success: Verified 1 of 1 plugins. のように表示されます。書き換えられたファイルや、配布物に無いファイルがあると警告が出ます。WordPress.org 以外で配布されている有料プラグインなどは、配布元のチェックサムが無いため検証できません。
バージョン間の違いを見る
更新で何が変わったかを知りたいときは、2つのバージョンの ZIP を取得して比べます。WordPress.org のプラグインは、https://downloads.wordpress.org/plugin/スラッグ.バージョン.zip の形の URL でダウンロードできます。
mkdir -p /tmp/plugin-diff && cd /tmp/plugin-diff
wget -q https://downloads.wordpress.org/plugin/akismet.5.5.zip -O old.zip
wget -q https://downloads.wordpress.org/plugin/akismet.5.6.zip -O new.zip
unzip -q old.zip -d old && unzip -q new.zip -d new
diff -ru old/akismet new/akismet | less
開発ログ(https://plugins.trac.wordpress.org/log/スラッグ/)でも、コミットごとの変更を確認できます。
読むときの着眼点
安全性を確かめる目的なら、次の箇所から読むと効率的です。ここに当てはまるコードがあること自体は問題ではありません。適切な権限確認と入力の検証・エスケープがあるかを見ます。
| 見る箇所 | 探す関数・フック | 確認すること |
|---|---|---|
| ログインしていない人も呼べる Ajax | wp_ajax_nopriv_ |
誰が呼んでも問題ない処理か |
| REST API のエンドポイント | register_rest_route |
permission_callback で権限を確認しているか |
| 権限とノンスの確認 | current_user_can、check_admin_referer、check_ajax_referer、wp_verify_nonce |
設定の保存やデータの変更の前に確認しているか |
| 入力値の利用 | $_GET、$_POST、$_REQUEST |
sanitize_text_field() などで検証しているか |
| データベースへの直接のクエリ | $wpdb->query、$wpdb->get_results など |
値を $wpdb->prepare() で渡しているか |
| 外部との通信 | wp_remote_get、wp_remote_post、curl_init |
どこへ何を送っているか |
| 難読化されたコード | eval(、base64_decode(、gzinflate( |
正当な理由がある使い方か |
プラグインのディレクトリで、次のように検索します。
grep -rn "wp_ajax_nopriv_" --include='*.php' .
grep -rn "register_rest_route" --include='*.php' .
grep -rnE "current_user_can|check_admin_referer|check_ajax_referer|wp_verify_nonce" --include='*.php' .
grep -rnE '\$_(GET|POST|REQUEST)\[' --include='*.php' .
grep -rnE '\$wpdb->(query|get_results|get_row|get_var|get_col)' --include='*.php' .
grep -rnE "wp_remote_(get|post|request)|curl_init" --include='*.php' .
grep -rnE "eval\(|base64_decode\(|gzinflate\(" --include='*.php' .
既知の脆弱性があるかどうかは、コードを読むより脆弱性データベースで調べる方が早く、見落としも少なくなります。手順はWordPressプラグインの脆弱性をチェックする方法|WP-CLI・WPScan・Wordfenceと手動確認にまとめています。
Plugin Check で機械的に確認する
WordPress.org が提供する「Plugin Check」プラグインは、プラグインディレクトリの審査で使われる項目の多くを自動で確認します。もともとは開発者が自分のプラグインを提出前に確かめるための道具ですが、他人のプラグインのコードの傾向をつかむのにも使えます。
- 管理画面:プラグインを有効化し、「ツール」→「Plugin Check」で対象を選んで実行
- WP-CLI:
wp plugin check akismet(単一ファイルのプラグインはwp plugin check hello.phpのようにファイル名で指定)
結果にはコーディング規約の指摘も多く含まれるため、「指摘がある=危険」ではありません。セキュリティに関する項目(エスケープ漏れなど)を中心に見ます。確認が終わったら、Plugin Check は無効化しておいてかまいません。
コードを変えたくなったら
確認の結果、動きを変えたくなっても、プラグインのファイルを直接書き換えるのは避けます。更新のたびに変更が消え、更新を止めればセキュリティ修正も受け取れなくなります。
- プラグインが用意しているフック(
apply_filtersやdo_actionで探せる)を使い、子テーマのfunctions.phpや自作のプラグインから動きを変える - フックが無い場合は、作者のサポートフォーラムや GitHub で要望を出す
- どうしても改変が必要なら、名前を変えた別のプラグインとして管理し、元のプラグインの更新内容を自分で取り込む
# プラグインが提供しているフックを探す
grep -rn "apply_filters\|do_action" --include='*.php' . | head -30
まとめ
- インストール前は WordPress.org の開発欄(Trac・SVN)と Playground でコードと動きを確認できる
- インストール後は、管理画面のプラグインファイルエディターで見るか、SSH でファイルを読む。エディターでの編集は避ける
wp plugin verify-checksumsで、配布元のファイルとの違い(改ざん)を確かめられる- 安全性は、権限確認・ノンス・入力の検証・
$wpdb->prepare()・外部通信の箇所から読む - 動きを変えたいときはファイルを直接編集せず、フックを使う