WordPress Plugin Boilerplate の Plugin_Name_Loader
クラスは、WordPressアクションにフックするか、プラグインからフィルタをかける必要がある場合に非常に便利です。最初の作者であるTom McFarlinは、 ローダーについて :
このファイルの目的は、フックの登録をカプセル化し、プラグインがロードされた適切な時点でアクションとフィルタの両方を実行することです。
多くの場合、適切なアクションやフィルタにフックする必要があります。では、どのようにしてプラグインの定型句のローダクラスを利用し、それを使用してアクションやフィルタにフックするのでしょうか。
この答えはクラスとオブジェクトを扱うことの基本的な理解を仮定します。完全な答えは少し長いので、あなたが焦っているのであれば、一番下のチェックリストの要約までスキップしてください。要約がわからない場合は、答え全体を読んでそれに従ってください。
ローダーの使い方を理解するために、コアプラグインクラスのソースPlugin_Name
in class-plugin-name.php
を見てください。
このクラスの コードの最初のブロック は、プライベートコンテナ$loader
を宣言しています。
protected $loader;
次に、 構文 内で、関数load_dependencies
およびdefine_public_hooks()
が呼び出されていることがわかります。
public function __construct() {
$this->plugin_name = 'plugin-name';
$this->version = '1.0.0';
// Our fearless loader is called from within this class object.
$this->load_dependencies();
$this->set_locale();
$this->define_admin_hooks();
$this->define_public_hooks();
}
構文の後に、関数 load_dependencies()
が定義されているのがわかります。ここがプラグインによって使用されるクラスのリソースファイルが呼び出される場所です。最初のクラスのリソースファイルは ここで必要なのはplugin-name-loader.php
です。
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-plugin-name-loader.php';
load_dependencies()
関数内でプラグインが依存している追加のクラスファイルが必要です。
たとえば、プラグインのincludes
ディレクトリにあるファイルPlugin_Name_Alert
にclass-plugin-name-alert.php
というクラスを定義した場合は、次の行をload_dependencies()
に追加することによってそれを要求します。
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-plugin-name-alert.php';
最初のステップは完了です。
検討を続けると、この関数の 最後に 、以前宣言された$loader
というコンテナーは、クラスPlugin_Name_Loader
の新しいオブジェクトとして定義されています。この機能:
$this->loader = new Plugin_Name_Loader();
それではスキップして define_public_hooks()
を見てみましょう。これは、以前に構成体から呼び出された別の関数です。これはあなたのプラグインが使うフックを整理するのに最適な場所です。外観は次のとおりです。
private function define_public_hooks() {
// Instantiates a new object of the class Plugin_Name_Public.
$plugin_public = new Plugin_Name_Public( $this->get_plugin_name(), $this->get_version() );
// This is where the loader's add_action hooks the callback function of the class object.
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
// Another action is passed to the class object.
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
}
ここで2つの重要なことが起こっているのがわかります。
クラスのオブジェクトがインスタンス化されます。
オブジェクトを引数として受け入れるローダーのカスタムバージョンのadd_action()
が実行されます。
これがローダーが私たちにとって役に立つところです。フックとコールバック関数だけをadd_action()
に渡す代わりに、ローダーは独自のカスタムadd_action()
とadd_filter()
関数を使用します。これにより、hook、class、およびコールバック関数の3つの引数を渡すことができます。このようにそれはあなたのクラスで関数を見つける方法を知っています。
参考までに、ローダーのバージョンのadd_action()
によるすべての 許容される引数 を次に示します。
add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 )
WordPressのadd_action()
やadd_filter()
にクラス関数を渡す方法はありますが、これはボイラープレートのローダーを通して行う方法です。
関数define_public_hooks()
の中で、あなたは今調べた2つのステップを繰り返すでしょう。覚えておいてほしいのは、これはPlugin_Name_Alert
のためのクラスファイルが以前に必要だったからです。
1.あなたのクラスのオブジェクトをインスタンス化します:
$plugin_alert = new Plugin_Name_Alert();
2.ローダーのadd_action()
を使用して$plugin_alert
の関数をフックします。
$this->loader->add_action( 'init', $plugin_alert, 'my_alert_function' );
それがすべてです。これはあなたがあなたがする必要があるすべてをしたことを確かめるためのチェックリストです。
0.クラスを作成してください。 上記の例ではPlugin_Name_Alert
でincludes/class-plugin-name-alert.php
として定義されています。これはテストのために使うことができる非常に単純なクラスです。これはWordPressが初期化されるたびに警告メッセージを表示するために使います。
<?php
class Plugin_Name_Alert {
public function my_alert_function() {
?> <script>alert("VAE VICTIS!");</script> <?php
}
}
1. load_dependencies()
関数内にクラスを必要とします。 この例では使用しました:require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-plugin-name-alert.php';
2.関数define_public_hooks()
内でクラスのオブジェクトをインスタンス化します。 これが例です:$plugin_alert = new Plugin_Name_Alert();
3.最後に、あなたのクラスからの関数をactionまたはfilterにフックします。これはdefine_public_hooks()
内で行います。 これが例です:$this->loader->add_action( 'init', $plugin_alert, 'my_alert_function' );