Поиск…


Синтаксис

  • add_action ($ tag, $ function_to_add)
  • add_action ($ tag, $ function_to_add, $ priority)
  • add_action ($ tag, $ function_to_add, $ priority, $ accepted_args)

параметры

параметр подробности
$ тег (строка) (обязательно) Имя действия, к которому подключен $function_to_add
$ function_to_add ( вызываемый ) (обязательно) Функция, которая должна вызываться, когда выполняется действие, указанное $tag
$ приоритет (int) (необязательно) Значение по умолчанию: 10 Используется для указания порядка, в котором выполняются функции, связанные с конкретным действием. Более низкие номера соответствуют более раннему исполнению, а функции с одинаковым приоритетом выполняются в том порядке, в котором они были добавлены в действие.
$ accepted_args (int) (необязательно) Значение по умолчанию: 1 Число аргументов, которые принимает функция.

замечания

Функция add_action() создает Action Hook , ассоциируя функцию PHP с определенным тегом или тегом действия . Когда действие инициируется вызовом do_action() (или do_action_ref_array() ) с определенным тегом, все функции, «привязанные» к этому тегу, будут выполнены.

В большинстве случаев эту функцию следует использовать в файле functions.php темы или в файле плагина - или другом исходном файле, загруженном либо.

Эта функция является частью API плагина

Основной крючок действия

Самое основное применение add_action() заключается в том, чтобы добавить пользовательский код, который будет выполняться в определенном месте в исходном коде установки WordPress, либо используя действия, предоставляемые Core of WordPress, или те, которые создаются сторонним кодом, таким как плагины и темы.

Чтобы добавить контент в раздел <head></head> сайта - скажите в мета-элементе add <link> чтобы указать, где информация об авторских правах для сайта может быть найдена - add_action() может использоваться для присоединения функции, которая печатает соответствующая разметка для действия 'wp_head' (которое «срабатывает», когда WordPress создает раздел <head> ):

function add_copyright_meta_link() {
  echo( '<link rel="copyright" href="' . get_home_url() . '/copyright">' );
}

add_action( 'wp_head', 'add_copyright_meta_link' );

Приоритет крюка действия

Любое количество функций может быть «привязано» к любому заданному действию. В некоторых случаях важно, чтобы функция hooked выполнялась до или после других, где третий параметр add_action() , $priority вступает в игру.

Если аргумент $priority опущен, функция будет привязана с приоритетом по умолчанию 10 . Когда действие «срабатывает», функции «hooked» будут вызваны, начиная с тех, которые добавлены с наименьшим $priority , и переходят к функциям с наибольшим $priority . Любые подключенные функции, которые имеют один и тот же приоритет, будут вызываться в том порядке, в котором они были добавлены (порядок, в котором выполнялись соответствующие вызовы add_action() ).

Например, предположим, что сторонний плагин использует функцию, подключенную к действию 'template_redirect' , чтобы перенаправлять посетителей на страницу daily-deal на партнерскую ссылку для внешнего сайта электронной коммерции, но вам нужно перенаправить только для зарегистрированных пользователей. Вам нужно будет использовать собственный крюк 'template_redirect' для отправки зарегистрированных посетителей на страницу входа. После определения того, что сторонний плагин присоединяет его к функции с $piority по умолчанию 10 , вы можете подключить свою функцию с приоритетом 9 чтобы убедиться, что ваша вступительная проверка происходит сначала:

function redirect_deal_visitors_to_login() {
  if( is_page( 'daily-deal' ) && !user_is_logged_in() ) {
    wp_redirect( wp_login_url() );
    exit();
  }
}

add_action( 'template_redirect', 'redirect_deal_visitors_to_login', 9 );

Подходы класса и методы объекта к действиям

Классы PHP - это мощный инструмент для улучшения организации кода и минимизации конфликтов имен. В какой-то момент неизбежно возникает вопрос о том, как создать крючок действия для метода класса.

Аргумент $function_to_add часто отображается как строка, содержащая имя функции, однако тип данных аргумента фактически является « вызываемым », который для наших целей можно суммировать как «ссылку на функцию или метод».

Существует целый ряд вызываемых форматов, которые могут использоваться для ссылки на методы для классов и объектов. Во всех случаях , однако, ссылочный метод должен быть публично виден . Метод является общедоступным, если он либо префикс с public ключевым словом, либо вообще не имеет ключевого слова видимости (в этом случае метод по умолчанию является общедоступным).

Объектные методы Действие Крючки

Методы объектов выполняются на конкретном экземпляре класса.

class My_Class {
  // Constructor
  function My_Class() {
    // (Instantiation logic)
  }

  // Initialization function
  public function initialize() {
    // (Initialization logic)
  }
}

После создания экземпляра вышеуказанного класса следующим образом,

$my_class_instance = new My_Class();

метод initialize() обычно вызывается на объект, вызывая $my_class_instance->initialize(); , Привязка метода к действию 'init' WordPress выполняется путем передачи массива, содержащего ссылку на экземпляр и строку, содержащую имя метода объекта:

add_action( 'init', [ $my_class_instance, 'initialize' ] );

Если add_action() вызывается в объектном методе, можно также использовать $this псевдо-переменную:

class My_Class {
  // Constructor
  function My_Class() {
    // (Instantiation logic)
    add_action( 'init', [ $this, 'initialize' ] );
  }

  // Initialization function
  public function initialize() {
    // (Initialization logic)
  }
}

Ключи для действия класса

Методы класса выполняются статически на классе, а не на каком-либо конкретном экземпляре. Учитывая следующий класс,

class My_Class {   
  // Initialization function
  public static function initialize() {
    // (Initialization logic)
  }
}

метод initialize() обычно вызывается с помощью оператора :: scope-resolution, то есть My_Class::initialize(); , Привязка метода статического класса к WordPress может осуществляться несколькими способами:

  • Использование массива, состоящего из строки, содержащей имя класса, и строки, содержащей имя метода:

    add_action( 'init', [ 'My_Class', 'initialize' ] );
    
  • Переходя строку , содержащую полную ссылку на метод, в том числе :: оператора:

    add_action( 'init', 'My_Class::initialize' );
    
  • Если add_action() вызывается внутри метода статического класса, вместо имени класса можно использовать ключевое слово self или магическую константу __CLASS__ . Обратите внимание, что это обычно нецелесообразно, так как значения этих элементов становятся несколько противоречивыми в случае наследования класса.

    class My_Class {
      // Setup function
      public static function setup_actions() {
        add_action( 'init', 'self::initialize' );
      }
    
      // Initialization function
      public static function initialize() {
        // (Initialization logic)
      }
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow