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 kluczowego self 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)
      }
    }
    


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow