⌨️

WordPress Pluginの仕組みについて語ります

2020/09/26に公開

WordPressのPlugin機能について

今で言っているプラグインと同じような機能がWordpressに導入されたのは、Version 1.2(Mingus) の頃です。
この導入によっても WordPress はより強固な CMS になったと考える人もいました。

WordPress のプラグインは非常に優秀ですが、「プラグイン」はどのようにして動作するようになっているのか、プラグインの役割について多くのプラグイン開発者も完全には理解されていません。
整理してみたいと思いました。

「プラグイン」と言う言葉

プラグイン(Plug-in)は、本来「差込口」の意味で使用される名詞です。
IT用語では、アプリケーションに機能拡張を行うプログラムを指す名詞となります。

WordPress用語の「プラグイン」

WordPressと言うアプリケーションに、標準で備わっていない機能を拡張する仕組みです。

1つ以上の PHPファイル群から成り立っており、主に zip形式で配布されています。
WordPress に追加インストールした後に有効化する事によって制作しているウェブサイトに様々な機能を持たせられます。

インストールと有効化

インストール

インストールと言う用語は、「システムに対して対象のプログラムを導入や設定を行い、使用可能な状態にすること」です。

WordPress プラグインは、インストールによって WordPressに認識されプラグインを使用可能な状態に準備されます。

方法

方法は3通りあります。

  • WordPressの管理画面からzipファイルをアップロードします
  • plugins ディレクトリにプラグインのディレクトリ、ファイル群を配置します
  • WordPress管理画面からプラグインの検索をしてインストールボタンを押します(公式ディレクトリプラグインのみ)

有効化

インストールするだけで機能が使われるようにはなりません。

WordPress では、実際にプラグインを使う為にはインストールされたプラグインを「有効化」する必要があります。

PCに備わっているアプリケーションでも、使用する場合にはダブルクリックでソフトウェアを起動するか、スタートアップに登録してPCのスタートアップ時に自動的に起動するように設定しておかなければ実行されないのと同様です。

方法

インストール済みのプラグインから「有効化」を選択します。

インストールされたプラグインの表示の仕組み

管理画面のプラグイン一覧画面が開かれた際に、wp-admin/includes/plugin.php にある get_plugins Function を実行します。

実行される処理では、最初にプラグインのルートディレクトリ(標準では、wp-content/plugins) 内の すべてのPHPファイルからプラグイン情報が存在するかを読み込んでいます。
その後、プラグイン情報が記述されているかPHPファイルの先頭のみを順番に読み、記述されているPHPを1つのプラグインのルートファイルとして配列にマージした結果を返却します。

この返却された配列値を基に、プラグイン一覧画面ではプラグインを一覧に表示されています。

PHPファイルの先頭を読む際はテキストファイルのように読まれる為、WordPress のプラグインのインストールでは、実際にプラグインのPHPが処理されることはありません。

有効化の仕組み

有効化ボタンが押された際に、プラグインの PHPファイル を実行します。

実行した PHPファイルに register_activation_hook があれば、それを処理します。
正常に処理された後には データベースの wp-options テーブルに option_nameactive_plugins とされるカラム行に、有効化したプラグインのルートとなる PHPファイル名をマージして更新します。
不正に処理された場合、データベースの値は更新せずにエラーを管理画面に警告します。

保存される配列値は、ファイル名のアルファベット順となります

データベースに更新される値は、プラグインのルートディレクトリ(標準では、wp-content/plugins)からの ディレクトリ名/PHPファイル名 順に配列でマージされます。

プラグインが動作する仕組み

データベースの wp-options テーブルに option_nameactive_plugins とされるカラム行を読み、保存されているプラグインの PHPファイル を順に読んでいます。

プラグインが実行される順番もファイル名のアルファベット順

保存されている値の先頭から順に実行される為、上記の通りのアルファベット順で実行されます。
プラグインの一覧に表示されている順ではありません。

アンインストールの仕組み

register_uninstall_hook が実行されると、データベースの wp-options テーブルに option_nameuninstall_plugins とされるカラム行に、register_uninstall_hookが実行されたプラグイン名と、アンインストール時に実行するFunction名を保存します。

アンインストール時には、そのカラム行を読み、アンインストールされたプラグイン名から保存されているアンインストール時に実行する Function名 の Function実行 を試みます。

register_uninstall_hook は何度も呼び出さないように!

register_uninstall_hook は、上記の通りデータベースに値を更新するだけです。
何度も呼び出す必要はありません。
これは非常に多い間違いで、パフォーマンスを劣化させるデメリットにしかなりません。

随時更新中です

本記事は随時更新していきます。

Discussion