itmar/loader-package

This package provides the ability to load classes via Composer's PSR-4 configuration without relying on the autoloader. This is useful when you want to avoid class conflicts between loaders in multiple plugins.

v1.1.0 2025-05-03 12:36 UTC

This package is auto-updated.

Last update: 2025-05-03 12:41:19 UTC


README

WordPress プラグインに最適な、クラス定義を使わない軽量 PSR-4 オートローダー

このパッケージは vendor/autoload.php に依存せず、Composer が生成する autoload_psr4.php だけを利用して、
WordPress 環境下でも クラス競合なく安全にオートロードと翻訳ファイルの読み込みを実現します。

🎯 特徴

  • spl_autoload_register() により PSR-4 クラスの自動読み込みを実現
  • Loader クラス定義などは一切不要。グローバル関数も定義しません
  • .mo ファイル(翻訳)も自動でロードされるため、多言語対応も安心
  • ✅ 複数プラグインで共存してもクラス・関数の衝突が発生しません

📦 インストール

composer require itmar/loader-package

🚀 使用方法(WordPress プラグイン)

プラグイン構成例

your-plugin/
├── plugin.php
├── composer.json
├── vendor/
│   └── itmar/
│       └── loader-package/
│           └── register_autoloader.php
│   └── composer/
│       └── autoload_psr4.php

plugin.php の先頭で呼び出すだけ

require_once __DIR__ . '/vendor/itmar/loader-package/register_autoloader.php';
  • ✅ PSR-4 にマッピングされたクラスが自動で読み込まれます
  • ✅ 対応する .mo 翻訳ファイルも自動ロードされます

🌐 翻訳ファイルの自動ロード

各 PSR-4 名前空間ごとに自動で以下を探します:

  • パス:{パッケージ}/languages/
  • ファイル名:{textdomain}-{locale}.mo(例:my-plugin-ja.mo
  • テキストドメインは名前空間から自動生成されます

vendor/itmar/block-class-package/languages/block-class-package-ja.mo

名前空間が Itmar\BlockClassPackage\ の場合、テキストドメインは block-class-package になります。

⚙ 技術的仕様

  • debug_backtrace() で呼び出し元から vendor/composer/autoload_psr4.php を特定
  • すべての PSR-4 マッピングに対して spl_autoload_register() を登録
  • .mo ファイルを load_textdomain() で即時読み込み(WordPress の i18n対応)

✅ なぜ vendor/autoload.php を使わないのか?

WordPress では複数のプラグインが独自に Composer を使うことが多く、
vendor/autoload.php を読み込むと ComposerAutoloaderInitXXXX クラスの競合が発生し、
Fatal error によってサイト全体が停止することがあります。

このパッケージは autoload_psr4.php のみを使用することで、安全かつ衝突のないクラスローディングを可能にします。

📄 ライセンス

MIT License

👤 作者

Itmaroon
master@itmaroon.net
https://itmaroon.net