Co to jest „wszystko” w isset ($ wp_filter ['all'])

10

Jestem nowicjuszem w WordPress. Próbuję zrozumieć, w jaki sposób generuje strony XHTML. Wydaje mi się, że jest to funkcja do_action( 'hook-name' ), ale utknąłem w zrozumieniu instrukcji isset( $wp_filter['all] )podczas czytania tej funkcji, ponieważ nie rozumiem, co to znaczy all.

Czy jest to funkcja PHP czy WordPress?

nguyen mc
źródło

Odpowiedzi:

9

allto tylko ciąg znaków, który programiści WordPress wybrali, aby zachowywać się inaczej niż jakikolwiek inny haczyk. Po podłączeniu alloddzwanianie będzie uruchamiane dla wszystkich innych haków .

Nie spędziłbym zbyt wiele czasu na poszukiwaniu źródła do_action, po prostu wiedz, że:

  1. add_action( 'x', 'whatever' )będzie oznaczać whateverpożary dlado_action( 'x' )
  2. add_action( 'all', 'whatever' )oznacza whateverogień dla każdego do_action , niezależnie od nazwy haka.
TheDeadMedic
źródło
5

Warunkowe if ( isset($wp_filter['all']) ) {można znaleźć bezpośrednio w tych funkcjach tworzenia haków:

  • apply_filters
  • apply_filters_ref_array
  • do_action
  • do_action_ref_array

Różnica między nimi polega na liczbie wysłanych argumentów. Albo potrzebujemy wielu argumentów, ref_arrayalbo jednego argumentu. Inna różnica „akcja vs. filtr” jest prosta, akcja może wykonywać dowolną funkcję / akcję, a nazwa filtru jest zwykle zarezerwowana dla funkcji, które pobierają dane łańcuchowe i zwracają te dane.

OK, w ten sposób tworzysz haczyki. I haki mają nazwy, i możesz łowić wiele nazw funkcji na tej samej nazwie haka (czytaj: tag).

wprowadź opis zdjęcia tutaj

Ale kiedy zdefiniujesz wszystkie funkcje związane z konkretnymi zaczepami, musisz gdzieś zapisać wszystkie nazwy zaczepów i powiązane funkcje. Właśnie dlatego wierzymy global $wp_filterw WordPress. Jeśli wypiszesz tę zmienną, otrzymasz coś w rodzaju ...

Array
(
    [pre_term_name] => Array
        (
            [10] => Array
                (
                    [sanitize_text_field] => Array
                        (
                            [function] => sanitize_text_field
                            [accepted_args] => 1
                        )

                    [wp_filter_kses] => Array
                        (
                            [function] => wp_filter_kses
                            [accepted_args] => 1
                        )

                )

            [30] => Array
                (
                    [_wp_specialchars] => Array
                        (
                            [function] => _wp_specialchars
                            [accepted_args] => 1
                        )

                )

        )

Cóż, nie spierajmy się o nazwę tej zmiennej. Osobiście nazwałbym to innym, prawdopodobnie, $wp_hooksponieważ ta nazwa nie została przyjęta. Jeśli jednak wrócimy do historii, odkryjemy, że do_actionjest odtąd @since 1.2.0i apply_filtersjest @since 0.71(wydany 9 czerwca 2003 r.). To daje całkiem dobre wyjaśnienie, dlaczego się nazywa $wp_filter. Jest to najbardziej prawdopodobne, ponieważ filtry zostały wprowadzone najpierw w WordPress. Później wprowadzili działania.

Opierając się na wypowiedzi z @TheDeadMedic ...

add Działalności („wszystko”, „cokolwiek”) będzie oznaczać pożary dla każdej czynności, niezależnie od nazwy haka.

Podniosłem pytanie, dlaczego potrzebujemy $wp_filter['all']? Tylko kilka przykładów. Introspekcja, testy i prawdopodobnie więcej wewnętrznych funkcji systemu w przyszłych wersjach WordPress.

prosti
źródło