【WordPress】クラス形式でプラグインを作ると名前管理が楽

  • 2020年9月23日
  • 2020年9月24日
  • PHP

 WordPress は長く続いている web サイト作成ツールです。プログラミングの知識がなくとも様々なデザインと構成の web サイトを作ることができ、多くの場所で使われています。
WordPress.com: 無料のサイトやブログを作成
 WordPress はテーマ、プラグインというライブラリを WordPress に組み込む仕組みがあり、これと本体は主に PHP と JavaScript で作られています。
WordPress Themes — WordPress.com
ご利用の WordPress.com サイトにプレミアムおよび無料の WordPress プラグイン
 WordPress の歴史は長く(2003年から現在も続いています)、その歴史は composer、npmといったパッケージ管理ツール(それぞれPHP、JavaScriptのパッケージ管理ツール)よりも長いです。そのためかオートローダ等のどのファイルをいつ読み込むといった仕組みが WordPress 独特のものになっています。これにより新しいPSRやオートローダに頼った開発ができず、グローバル化の名前を気にするコーディングが必要になります。特に PHP コードを埋め込むことになるプラグインではグローバル化の既存コードを破壊しやすく、特に気にしなければなりません。次にある WordPress 直々のプラグイン開発者のベストプラクティスにも同じことが書いてあります。
 Best Practices | Plugin Developer Handbook | WordPress Developer Resources
 クラスによるプラグイン定義でオブジェクト定数を活用するとこの名前問題をそう気にしなくてよくなります(完璧ではないし、結局コードが WordPress でないモノより増えるのはいかんともしがたいです)
 例は次です。

// WordPress プロセス初期化時に HogePluginIndex クラスの静的メソッド init を実行
// @see https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7
add_action( 'init', 'HogePluginIndex::init' );

class HogePluginIndex {
    // プラグイン固有の文字列。接頭辞などに使用
    public const PLUGIN_ID = 'HogePluginIndex';
    // ↑の定数を使ってプラグインは以下で使用するキー文字列を都度定義
    public const CONF_HOGEHOGE_KEY = self::PLUGIN_ID . '_hogehoge';
    public const HOGE_FORM_KEY = self::PLUGIN_ID . '_im_hoge_form';

    // WordPress 初期化時に実行するメソッド。この中でインスタンス化前の準備を色々
    // プラグインによる処理の必要がないならこの時点でインスタンス化せずに処理を終了する方が良い
    // 条件式が増えやすい。コンストラクタ内の小分けしてある条件式をまとめる必要があるのでここの処理終了は開発者に優しくない
    public static function init(){
        new self();// コンストラクタの中このクラスのインスタンスを用いる WordPress のアクション(JavaScriptでいうイベント的な)を定義
    }
    
    // コンストラクタ。インスタンス内部の前処理。ここまでの間にアクションを定義しきると整理しやすい
    public function __construct() {
		if ( is_admin() && is_user_logged_in() ) {
			// ログイン済みで管理者ならば管理者メニューメソッド admin_menu を実行
			add_action( 'admin_menu', [ $this, 'admin_menu' ] );
		}
		// リクエストされたページのURLがあらかじめ保存した設定値と一致したならば JavaScript 呼び出しメソッドの hook_script を実行
		if ($_SERVER['REQUEST_URI'] === get_option( self::CONF_HOGEHOGE_KEY )) {
			add_action( 'wp_enqueue_scripts', [ $this, 'hook_script' ] );
		}
		// 特定のキーを持つリクエストがPOSTされたならば、フォームリクエストの操作メソッド _handling_form_request を実行
		if ( isset( $_POST['form-hook-action'] ) && $_POST['form-hook-action'] === self::HOGE_FORM_KEY ) {
			$this->_handling_form_request();
		}
	}

}

 上記の様にオブジェクト定数でキーを一定の法則で定義し、都度使用することで既存他コードとの衝突を避けられます。加えて定数のためIDEの予測補完が効き、ポチポチ+Tabキーですぐに入力できます。注意点としてこの init メソッド、コンストラクタは常に実行される、という点があります。きっちり実行すべきタイミングで実行すべき処理のみを行えるように条件式を用意しなければ WordPress が作成したプラグインに関係ない部分で重くなります。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG