WordPressフックは次の2つの方法で使用できます。
コールバック関数名と適切な関数を使用する
add_action( 'action_name', 'callback_function_name' );
function callback_function_name() {
// do something
}
匿名関数(閉鎖)の使用
add_action( 'action_name', function() {
// do something
} );
WordPressの使用方法に違いはありますか?推奨される方法とその理由は何ですか?
無名関数の欠点は、 remove_action を使用してアクションを削除できないことです。
重要:フックを削除するには、フックが追加されたときに$function_to_remove
および$priority
引数が一致する必要があります。これは、フィルターとアクションの両方に当てはまります。削除の失敗に関する警告は表示されません。
function_to_remove
を定義していないため、削除できません。
そのため、他の誰かが上書きしたいと思う可能性のあるプラグインやテーマの中でこれを使用してはなりません。
クロージャを使用すると、コールバックとして渡すために最初にグローバル関数を作成する必要がないため、グローバル名前空間をクリーンに保つの利点があります。
add_action('admin_init', function () {
// some code...
});
個人的には、コールバックとしてクロージャを使用することを好みますnless:
クロージャはクラス内で有益にすることもできます。
class SomeClass
{
public function __construct()
{
add_action('wp_head', function () {
$this->addSomeStyling();
});
}
protected function addSomeStyling()
{
echo '<style> body { color: #999; } </style>';
}
}
通常、コールバックメソッドはpublicにする必要がありますが、この場合、privateまたはprotected。
このソリューションはPHP 5.4+でのみ機能します。PHP 5.3+でも機能させるには、$this
オブジェクト参照を明示的に渡す必要があります。次のようなクロージャー
public function __construct()
{
$self = $this;
add_action('wp_head', function () use ($self) {
$self->addSomeStyling();
});
}