Szukaj…


Składnia

  • działanie dodatkowe (tag, function_to_call, Priority, num_of_args);
  • add_filter (tag, function_to_call, Priority, num_of_args);

Parametry

Parametr Wyjaśnienie
Tag $ (string) (Wymagane) Nazwa akcji, do której podpięta jest funkcja $.
funkcja $ (wywoływalny) (wymagany) Wymaga ciągu zawierającego nazwę funkcji lub funkcję anonimową. Zobacz przykłady dodawania funkcji w ramach klas.
Priorytet $ (int) default = 10. Funkcje dołączone do haków / filtrów będą działały z przypisanym priorytetem. Możesz mieć sytuację, w której chcesz pracować z kodem przed innymi działaniami, ustaw priorytet = 1 lub po wszystkich innych dołączonych funkcjach priorytet = 100 itd. Podobnie jak w przypadku wszystkich funkcji php, możesz używać tej funkcji bez przekazywania wartości zmiennej gdzie ustawiono wartość domyślną, ale jeśli chcesz zmienić liczbę zwracanych parametrów, musisz określić!
parametry $ (int) default = 1. Liczba parametrów zwróconych do dołączonej funkcji. Zwrócone parametry będą zależeć od liczby dołączonej do miejsca, w którym utworzono hak. Aby apply_filters() więcej informacji, zobacz apply_filters() i do_action() .

Uwagi

Haki do Wordpress

Coś, co często dezorientuje programistów przy rozpoczynaniu pracy z WordPress, to zastosowanie programów apply_filters() i add_action() . Często zobaczysz wtyczki / motywy korzystające z nich w kodzie, a jeśli nie rozumiesz pojęcia, ciężko będzie z nimi pracować.

W skrócie (bardzo krótko, przejrzyj schemat blokowania ładowania WordPress, aby uzyskać szczegółowe informacje na temat procesu), WordPress ładuje się w następujący sposób:

  1. wp-load.php - funkcje itp
  2. mu-plugins - wszelkie pliki znalezione w folderze mu-plugins - często używane do obsługi buforowanych obiektów
  3. Wtyczki - nie ma określonej kolejności, zostaną zainstalowane wszystkie zainstalowane i aktywowane wtyczki
  4. Aktywny motyw podrzędny / motyw nadrzędny
  5. init - reszta danych
  6. szablon

Jeśli jesteś programistą i pracujesz z plikiem funkcji, możesz zobaczyć, że oba są ładowane wcześniej w tym procesie niż pliki, z którymi pracujesz. Oznacza to, że nie możesz modyfikować procesów (pamiętaj, że nie możesz nadpisywać funkcji) ani zmiennych, które działają później lub nie zostały jeszcze zdefiniowane. Również twórcy motywów mogą umieszczać haczyki w kodzie, aby umożliwić wtyczki na zaczepienie lub wtyczki mogą pozwolić innym wtyczkom na zastąpienie ich zmiennych. Do tej pory może to być mylące, ale trzymaj się.

Aby zrozumieć add_filter() i add_action() musimy przede wszystkim przyjrzeć się, jak tworzone są haki.

$arga= 'hello';
do_action('im_a_hook', $arga );

Kiedy napotkasz powyższe w WordPress, wywoła on wszelkie funkcje dołączone do haka im_a_hook (poszukaj $wp_filter aby uzyskać informacje na temat procesu). W dołączonej funkcji $arga będzie dostępna dla dołączonej funkcji do pracy.

add_action('im_a_hook', 'attached_function');

function attached_function($arga){
     echo $arga;
}

Otwiera to nowe, potężne możliwości modyfikowania zmiennych w niektórych punktach procesu ładowania. Pamiętasz, jak powiedzieliśmy wcześniej, że szablony są ładowane po wtyczkach / motywach? Jedną z popularnych wtyczek jest WooCommerce, która tworzy ekrany w dalszej części procesu. Nie będę dokumentować, ale przykład działania do do_action można znaleźć we wtyczce.

do_action( 'woocommerce_after_add_to_cart_button' );

Tutaj mamy utworzony hak, który nie przekazuje żadnych zmiennych, ale nadal możemy się z nim dobrze bawić:

add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');

function special_offer(){
    echo '<h1>Special Offer!</h1>;
}

Powyższy add_action będzie echo nagłówek z oferty specjalnej, gdzie do_action('woocommerce_after_add_to_cart_button') znajduje się co jest podczas tworzenia ekranu woocommerce. Więc możemy użyć tego haka, aby wstawić HTML. Inne zastosowania mogą obejmować przekierowanie na zupełnie inny ekran itp.

Do funkcji można również przekazać wiele zmiennych. Wypróbuj to w swoich funkcjach motywów. Zwróć uwagę na ostatni parametr, który ustawiamy na 3, ponieważ chcemy pracować z 3 dostępnymi parametrami. Jeśli zmienimy to na 2, zwrócone zostaną tylko 2 i otrzymamy nieokreślony błąd.

add_action('custom_hook', 'attached_function', 10, 3);

function attached_function($a,$b,$c){
    
    var_dump($a);
    var_dump($b);
    var_dump($c);
    
}
    

$arga = 1;
$argb = 2;
$argc = 3;

do_action('custom_hook', $arga, $argb, $argc);
exit;

Istnieje inny typ haka WP zwany filtrem. Filtr różni się od akcji w użyciu, akcja może odbierać tylko zmienne, oczywiście te zmienne są w zakresie funkcji (powinieneś wiedzieć, co to jest zakres php, jeśli nie Google). Filtry przekazują zwrócone dane, dzięki czemu można modyfikować zmienne.

$filter_me= apply_filters('im_a_filter', $variable_to_filter);

W powyższym przykładzie możesz zmodyfikować wartość $filter_me ponieważ wszelkie zwracane dane będą wartością przechowywaną w zmiennej. Tak na przykład (uwaga zmieniamy $variable_to_filter do $filter_me w przykładzie):

add_filter('im_a_filter', 'attached_function', 100);

function attached_function($filter_me){
    
    $filter_me= 'ray';
    
    return $filter_me;
    
}


$filter_me = 'bob';
$filter_me= apply_filters('im_a_filter', $filter_me);

Zmienna $filter_me będzie teraz zawierać „ray” zamiast „bob” , ustawiliśmy priorytet na 100, więc jesteśmy pewni, że nikt nie zmieni wartości po użyciu (może istnieć wiele filtrów działających na tym samym haku) może teraz zmieniać zmienne używane później w tym procesie, jeśli jest apply_filters() .

Możesz także przekazać wiele parametrów, ale możesz zmienić tylko jeden z nich. Musisz także zwrócić wartość, w przeciwnym razie twoja zmienna nic nie będzie zawierała. Jeśli rozumiesz, jak używasz php do przypisywania wartości / tablic / obiektów do zmiennych, będzie to dla ciebie oczywiste, np .:

add_filter('im_a_filter', 'attached_function', 100, 3);

function attached_function($filter_me, $arga, $argb){
    
    $filter_me= 'ray'.$arga.$argb;

    $arga= 'you fool';
    
    return $filter_me;
    
}

$filter_me = 'bob';

$arga = ' middlename';
$argb = ' surname';

$filter_me= apply_filters('im_a_filter', $filter_me, $arga, $argb);

Zmienna $filter_me zawiera teraz „ray middlename nazwisko” . Ale co z $arga ? To wciąż zawiera „środkową nazwę” , zmiana $arga na „ty głupca” w ramach naszej funkcji nie ma wpływu na zdefiniowaną wartość poza jej zakresem (istnieją sposoby, globale google itp.)

działanie dodatkowe ($ nazwa_haka, $ funkcja, $ priorytet, $ parametry)

add_filter ($ nazwa_haka, $ funkcja, $ priorytet, $ parametry);

działanie dodatkowe - inicj

add_action('init', 'process_post');

function process_post(){
   if($_POST)
     var_dump($_POST);
}

działanie dodatkowe - init - funkcja anonimowa

add_action('init' , function(){
    echo 'i did something';
});

add46 - init - w obrębie obiektu klasy

 class sample{

     public function __construct(){
         add_action('init', array($this, 'samp') );
     }


     public function samp(){ // must be public!!
         echo 'i did something';
     }
 }

 new sample();   

działanie dodatkowe - init - w ramach klasy statycznej

 class sample{

     public static function add_action_func(){
         //note __CLASS__ will also include any namespacing
         add_action('init', array(__CLASS__, 'samp') );
     }

     public static function samp(){
         echo 'i did something';
     }
     
 }

 sample::add_action_func();


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