WordPress
Funkcja: add_action ()
Szukaj…
Składnia
- działanie dodatkowe ($ tag, $ function_to_add)
- działanie dodatkowe ($ tag, $ function_to_add, $ priorytet)
- działanie dodatkowe ($ tag, $ function_to_add, $ priorytet, $ accept_args)
Parametry
Parametr | Detale |
---|---|
Tag $ | (string) (Wymagane) Nazwa akcji, do której podpięty jest $function_to_add |
$ function_to_add | ( wywoływalny ) (Wymagany) Funkcja, która powinna zostać wywołana, gdy zostanie wykonana akcja wskazana przez $tag |
Priorytet $ | (int) (Opcjonalnie) Wartość domyślna: 10 Służy do określania kolejności wykonywania funkcji powiązanych z określoną akcją. Niższe liczby odpowiadają wcześniejszemu wykonaniu, a funkcje o tym samym priorytecie są wykonywane w kolejności, w jakiej zostały dodane do akcji. |
$ accept_args | (int) (Opcjonalnie) Wartość domyślna: 1 Liczba argumentów akceptowanych przez funkcję. |
Uwagi
Funkcja add_action()
tworzy Hak akcji , łącząc funkcję PHP z określonym „znacznikiem” akcji lub nazwą. Kiedy akcja zostanie „wyzwolona” przez wywołanie do_action()
do do_action()
(lub do_action_ref_array()
) z określonym znacznikiem, wszystkie funkcje „zaczepione” do tego znacznika zostaną wykonane.
W większości przypadków tej funkcji należy użyć w pliku functions.php
kompozycji lub pliku wtyczki - lub w innym pliku źródłowym załadowanym przez jeden z nich.
Ta funkcja jest częścią interfejsu API wtyczki
Podstawowy hak akcji
Najbardziej podstawową aplikacją add działań add_action()
jest dodawanie niestandardowego kodu, który ma zostać wykonany w określonym miejscu w kodzie źródłowym instalacji WordPress - albo za pomocą akcji dostarczonych przez Core of WordPress, albo tych utworzonych przez kod innej firmy, taki jak wtyczki i tematy.
Aby dodać treść do sekcji <head></head>
witryny - powiedz do elementu meta add <link>
aby wskazać, gdzie można znaleźć informacje o prawach autorskich do witryny - można użyć add_action()
do dołączenia funkcji, która drukuje odpowiedni znacznik do akcji 'wp_head'
(która „uruchamia się”, gdy WordPress buduje sekcję <head>
):
function add_copyright_meta_link() {
echo( '<link rel="copyright" href="' . get_home_url() . '/copyright">' );
}
add_action( 'wp_head', 'add_copyright_meta_link' );
Priorytet zaczepu akcji
Dowolną liczbę funkcji można „podpiąć” do dowolnej akcji. W niektórych przypadkach ważne jest, aby haczykowaty funkcja wykonać przed lub po innych, czyli tam, gdzie trzeci parametr do add_action()
, $priority
wchodzi w grę.
Jeśli argument $priority
zostanie pominięty, funkcja zostanie dołączona z domyślnym priorytetem 10
. Gdy akcja zostanie „wyzwolona”, funkcje „przechwycone” będą wywoływane, zaczynając od tych, które zostały dodane z najmniejszym $priority
, i przechodząc do funkcji o największym $priority
. Wszelkie przechwycone funkcje, które mają ten sam priorytet, będą wywoływane w kolejności, w której zostały dodane (w kolejności, w jakiej zostały wykonane ich wywołania add_action()
).
Załóżmy na przykład, że wtyczka innej firmy korzysta z funkcji dołączonej do akcji 'template_redirect'
w celu przekierowania odwiedzających stronę daily-deal
do linku partnerskiego do zewnętrznej witryny e-commerce, ale chcesz przekierować występować tylko dla zalogowanych użytkowników. Musisz użyć własnego haka 'template_redirect'
aby wysłać zalogowanych użytkowników na stronę logowania. Po ustaleniu, że wtyczka innej firmy dołącza swoją funkcję z domyślną wartością $piority
wynoszącą 10
, możesz podpiąć swoją funkcję z priorytetem 9
aby upewnić się, że sprawdzenie zalogowania nastąpi najpierw:
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 );
Metody zaczepiania klas i obiektów do akcji
Klasy PHP to potężne narzędzie do poprawy organizacji kodu i minimalizacji kolizji nazw. W pewnym momencie pojawia się pytanie, jak utworzyć hak akcji dla metody klasowej.
$function_to_add
argumentem jest często wyświetlany jako ciąg zawierający nazwa funkcji, jednak dane typu argumentu jest rzeczywiście „ wymagalne ”, który dla naszych celów można podsumować jako „odniesienie do funkcji lub metody”.
Istnieje wiele wywoływanych formatów, których można używać do odwoływania się do metod w klasach i obiektach. Jednak we wszystkich przypadkach przywoływana metoda musi być publicznie widoczna . Metoda jest publiczna, jeśli jest poprzedzona słowem kluczowym public
lub w ogóle nie ma słowa kluczowego widoczności (w takim przypadku metoda domyślnie przyjmuje wartość public).
Obiekt Metoda Działanie Haki
Metody obiektowe są wykonywane na konkretnej instancji klasy.
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
Po utworzeniu powyższej klasy w następujący sposób:
$my_class_instance = new My_Class();
metoda initialize()
normalnie byłaby wywoływana na obiekcie przez wywołanie $my_class_instance->initialize();
. Podpięcie metody do akcji WordPress 'init'
odbywa się poprzez przekazanie tablicy zawierającej odwołanie do instancji i łańcucha zawierającego nazwę metody obiektu:
add_action( 'init', [ $my_class_instance, 'initialize' ] );
Jeśli wywoływana jest metoda add_action()
w ramach metody obiektowej, można również użyć pseudo-zmiennej $this
:
class My_Class {
// Constructor
function My_Class() {
// (Instantiation logic)
add_action( 'init', [ $this, 'initialize' ] );
}
// Initialization function
public function initialize() {
// (Initialization logic)
}
}
Metoda klasy Działanie Haki
Metody klasowe są wykonywane statycznie na klasie, a nie na konkretnej instancji. Biorąc pod uwagę następującą klasę,
class My_Class {
// Initialization function
public static function initialize() {
// (Initialization logic)
}
}
metoda initialize()
normalnie byłaby wywoływana przy użyciu operatora ::
scope-resolution, tj. My_Class::initialize();
. Podłączenie metody klasy statycznej do WordPressa można wykonać na kilka różnych sposobów:
Korzystanie z tablicy złożonej z łańcucha zawierającego nazwę klasy i łańcucha zawierającego nazwę metody:
add_action( 'init', [ 'My_Class', 'initialize' ] );
Przekazywanie ciągu zawierającego pełne odwołanie do metody, w tym operatora
::
add_action( 'init', 'My_Class::initialize' );
Jeśli
add_action()
jest wywoływany w ramach metody klasy statycznej, zamiast nazwy klasy można użyć słowa kluczowegoself
lub magicznej stałej__CLASS__
. Zauważ, że jest to na ogół niewskazane, ponieważ wartości tych przedmiotów stają się nieco sprzeczne z intuicją w przypadku dziedziczenia klas.class My_Class { // Setup function public static function setup_actions() { add_action( 'init', 'self::initialize' ); } // Initialization function public static function initialize() { // (Initialization logic) } }