Ключи WordPress можно использовать двумя способами:
используя имя функции обратного вызова и соответствующую функцию
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... });
Лично я предпочел бы использовать закрытие в качестве обратных вызовов, если :
Закрытие также может быть полезным в классах .
class SomeClass { public function __construct() { add_action('wp_head', function () { $this->addSomeStyling(); }); } protected function addSomeStyling() { echo '<style> body { color: #999; } </style>'; } }
Обычно методы обратного вызова должны быть обнародованы , но в этом случае вы также можете сделать их частными или защищенными .
Это решение работает только для PHP 5.4+. Чтобы заставить его работать для PHP 5.3, вам необходимо явно передать ссылку на $this
ссылку на объект, например:
public function __construct() { $self = $this; add_action('wp_head', function () use ($self) { $self->addSomeStyling(); }); }