Objaśnienie funkcji Apply_filters i jej zmiennych


16

Uczę się, jak budować formularze HTML za pomocą PHP, biorąc przykład z wtyczki „prostsza rejestracja formularza”.

Patrzę na ten kod:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Czy możesz wyjaśnić, co się tutaj dzieje - co robi ta funkcja, dlaczego potrzebne są „instrukcje dotyczące uproszczonej rejestracji” i „prostej rejestracji”?

Dlaczego ta linia nie może po prostu być:

$form .= 'Please fill out this form to sign up for this site' ;

Przeczytałem odwołanie do funkcji, ale nadal nie mogę tego rozgryźć.

Odpowiedzi:


22

Ta linia używa dwóch różnych funkcji, które wymagają dwóch osobnych wyjaśnień.

__ ()

To jest funkcja tłumaczenia. Jeśli ustawienia zostaną wykonane poprawnie, tłumaczy pierwszy parametr z listy wstępnie przetłumaczonych ciągów. Jeśli instalacja ma plik ze skompilowanym tłumaczeniem dla tej funkcji, będzie go używał. Oczywiście wtyczka musi spakować swoje tłumaczenie, stąd drugi parametr. simplr-reginformuje, __()że tłumaczenie ciągu 'Please fill out this form to sign up for this site'powinno znajdować się w powiązanym pliku tłumaczenia 'simplr-reg'(odbywa się to wcześniej we wtyczce za pomocą load_plugin_textdomain()funkcji).

Następnie funkcja zwraca tłumaczenie. Jeśli nie ma tłumaczenia do zwrócenia (np. Bieżący język nie ma tłumaczenia skompilowanego, łańcuch nie ma tłumaczenia skompilowanego dla tego pakietu itp.), Zwracane jest oryginalne wejście.

Tak więc w przypadku witryny WordPress w języku angielskim __( 'This', 'simplr-reg' )jest funkcjonalnie taki sam jak 'This'. Aby dowiedzieć się więcej o l10n (lokalizacja), przeczytaj o tym w kodeksie:

http://codex.wordpress.org/I18n_for_WordPress_Developers

Apply_filters ()

Ta funkcja pozwala w razie potrzeby filtrować wartości używane przez wtyczkę. Jest to jedna z głównych koncepcji, które należy rozumieć jako programista wtyczek. WordPress jest rozszerzany przez haki, które są w zasadzie punktami dostępu, pozwalającymi na czas wykonywania działań wtyczki i / lub manipulowanie informacjami / danymi używanymi przez WordPress itp.

Aby manipulować danymi, takimi jak fragment kodu, o który prosiłeś, możesz użyć tej funkcji add_filter(). Oto podstawowy przykład tego, jak to działa:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Prawdopodobnie rozpoznasz tam pierwszy argument. To ten sam, który zastosowano add_filterpowyżej. To jest nazwa haka. Drugi argument to wywołanie zwrotne filtra. Musi to być prawidłowe wywołanie zwrotne funkcji ( przeczytaj więcej o wywołaniach zwrotnych tutaj ). W tym wierszu kodu jest napisane: „Po 'simplr-reg-instructions'wykonaniu przechwytywania uruchom funkcję z podanym przeze mnie wywołaniem zwrotnym”. apply_filters()wykonuje hak znaleziony w pierwszym argumencie, co w istocie oznacza „wykonaj wszystkie funkcje zarejestrowane dla tego haka”. apply_filtersnastępnie przekazuje wszystkie inne argumenty (w tym przypadku 'Please fill out this form to sign up for this site') do funkcji w tym filtrze. Tak więc wywołanie zwrotne, którego użyłem powyżej, powinno wyglądać następująco:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

W WordPress są dwa rodzaje haków: filtry (takie, których tu używamy) i akcje. Główną różnicą między nimi jest to, że filtry oczekują, że coś zwrócisz, a działania nie. Tak więc dla tego filtra mój przykład powyżej dodaje trochę html 'Please fill out this form to sign up for this site'i zwraca go.

Przeczytaj więcej o działaniach i hakach tutaj:

http://codex.wordpress.org/Plugin_API


John, wielkie dzięki. Świetna odpowiedź! Ale nie mogę znaleźć ani jednego wiersza „add_filter („ instrukcje-reg-reg ”, ...”) w plikach wtyczek. Jak może działać program Apply_filter niż?
Ash

1
Jeśli do haka nie są dodane żadne filtry, po prostu zwraca oryginalne wejście z powrotem. Filtr nie jest dostępny dla wtyczki, ale możesz jej użyć, jeśli potrzebujesz / chcesz, abyś nie musiał modyfikować samej wtyczki.
John P Bloch,

+1 Doskonałe wyjaśnienie - czyta się jak dokumentacja ;-)
Eddie B

+1 Świetna odpowiedź, dokładnie to, czego szukałem, byłem bardzo zdezorientowany, ale teraz wszystko jest takie jasne;)
doz87

5

Masz dwie różne funkcje tutaj apply_filtersi__()

funkcja Apply_filters to metoda WordPressa umożliwiająca zmianę / edycję wartości zmiennych za pomocą własnych funkcji zwrotnych i add_filterfunkcji. przyjmuje wiele argumentów, ale najważniejsze z nich to pierwsze dwa:

$something = apply_filters( $tag, $value, $var ... );

Tag $ to nazwa haka filtru, który jest używany add_filternp .:

add_filter($tag,callback_function);

Wartość $ to rzeczywista wartość, którą będziesz mógł zmienić lub edytować.

$ var to zmienne, których może używać twoja funkcja zwrotna, jedna lub więcej.

__() funkcja służy do tłumaczenia:

__($message,$text_domain);

$ wiadomość to rzeczywista wiadomość do przetłumaczenia.

$ text_domain jest znacznikiem domeny tekstowej używanym do ładowania wtyczki lub tłumaczenia motywu load_plugin_textdomain()

co to robi?

Przeszukuje moduł lokalizacyjny pod kątem tłumaczenia komunikatu $ i przekazuje tłumaczenie do instrukcji return PHP. Jeśli nie znaleziono tłumaczenia dla $ message, po prostu zwraca $ message.

Więc teraz dwie funkcje w twoim przypadku działają w ten sam sposób, appl_filters wyśle ​​dowolną funkcję zwrotną związaną z simplr-reg-instructionszaczepem filtra przetłumaczoną wartość (jeśli istnieje) „Wypełnij ten formularz, aby zarejestrować się na tej stronie”, używając tekstu- domenasimplr-reg


Bainternet, wielkie dzięki! Jak to się dzieje, że nie mogę znaleźć żadnych wierszy „add_filter” („instrukcje-reg-reg”, „”) w plikach wtyczek?
Ash

Jest to haczyk dla programistów, którzy chcą rozszerzyć lub przefiltrować funkcjonalność wtyczek.
Bainternet,

Więc nie należy się tutaj spodziewać add_filter? Nie rozumiem dlaczego. Czy appl_filters nie powinien uruchamiać wszystkich funkcji związanych z jego przechwyceniem przez funkcje add_filter?
Ash

apply_filtersto add_filtersymbol zastępczy, który pozwala podpiąć własne funkcje za pomocą , więc nie należy oczekiwać żadnego filtra add_filter, chyba że dodasz własny
Bainternet
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.