Różnica między do działań i działań dodatkowych

20

To pytanie może być złe, nie jestem tego pewien. Ponieważ nie mam jasności co do tego.

Wiem, add_actionże służy do połączenia naszej funkcji z określoną funkcją. Na przykład add_action('wp_head'.'myfunc');teraz, co kiedykolwiek kod myfunczostanie wykonany wwp_head() . To jasne, ale mam wątpliwości, do_actionco to robi?

Myślę, że służy do tworzenia własnego haka, takiego jak już dostępne haki (wp_head, wp_footer, itp.). Jeśli mam rację, czy ktoś może pokazać mi prostą zrozumiałą odpowiedź z prostym przykładem.

Próbowałem różnicy w Internecie, ale wszystkie wskazują na różnicę między add działań i add_filter. Nie chcę tam iść, ponieważ najpierw chcę to wyjaśnić, a następnie się tam przeprowadzę.

Czy ktoś może mi pomóc?

EDYCJA po pytaniu POST

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

Próbowałem tego we wtyczce, ale nie dostałem komunikatu ostrzegawczego.

Ale kiedy podpinam tę samą funkcję wp_head, to działa dobrze

/******************working****************/
add_action('wp_head','custom_register');
słońce
źródło
Co się stanie, gdy zadzwonisz do_action('custom'); po zarejestrowaniu oddzwonienia? I upewnij się, że jQuery jest załadowany.
fuxia
Ja nie dostaję komunikat alertu albo na tylnym końcu lub przedniej
niedziela
jQuery są ładowane. Kiedy podpinam tę samą funkcję wp_head, działa dobrze, ale nie działa zcustom
niedz.
Sun, uważam, że na twoje oryginalne pytanie odpowiedział toscho i powinieneś oznaczyć to jako rozwiązane. Dokonane przez Ciebie zmiany # 3 i # 4 należą do nowego pytania .
brasofilo

Odpowiedzi:

13

Służy do_action( 'unique_name' )do tworzenia własnych działań.

Możesz go użyć, aby zaoferować interfejs API dla Twojej wtyczki , dzięki czemu inne wtyczki mogą rejestrować wywołania zwrotne dla akcji niestandardowej. Przykład: Czy muszę wywoływać do działań w mojej wtyczce?

Ale możesz także użyć niestandardowych akcji (lub filtrów) w kompozycji. Przykład: najlepszy sposób implementacji niestandardowych sekcji w motywie WordPress

Możesz połączyć oba elementy, aby wtyczka i motyw działały razem. Przykład: Jak udostępnić metodę z wtyczki w motywie?

Podsumowanie: add_action( 'foo' )rejestruje oddzwonienie, do_action( 'foo' )wykonuje zarejestrowane oddzwonienie.

fuxia
źródło
Dzięki za pomoc, którą otrzymałem, jest to głównie w celu API. Próbowałem próbki, ale to nie wyszło. Czy możesz tam znaleźć problem? Sprawdź mój EDIT @toscho
niedz.
Czy możemy to powiedzieć jako kolejny przypadek dziedziczenia? zamiast rozszerzać i zastępować klasę idziemy w tę stronę. Czy to jest poprawne?
niedz.
@sun Hm, tak, ale można połączyć oba podejścia , nie wykluczają się one wzajemnie.
fuxia
1

To jest moje przypuszczenie, więc jeśli wiesz lepiej, zrób komentarz, aby zaktualizować moje przypuszczenie.

Twój kod wtyczki jest wykonywany wcześniej wp_head()(co możemy założyć, że wywoła dodane do niego działania). Kiedy ty add_action('wp_head','custom_register')mówisz PHP, że kiedy (w przyszłości) do_action('wp_head')zostanie wywołany, również zadzwoń custom_register(). To samo dotyczy twojego wezwania do, add_action('custom','custom_register')ale jak widać w kodzie, wezwanie do do_action('custom')zostało już wykonane, a kiedy zostało wywołane, nie dodano (jeszcze) żadnych działań. Dlatego Toscho zapytał, co się stanie, gdy zadzwonisz do_action('custom') po zarejestrowaniu oddzwonienia. Twoja odpowiedź na temat zaplecza i interfejsu jest niejednoznaczna. Jeśli zamienisz dwie ostatnie linie w następującym kodzie, myślę, że to zadziała:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.
Dave Scotese
źródło
0

do_action: Rejestruje hak akcji, a add_action: dodaje funkcję zwrotną do zarejestrowanego haka.

Przykład

Rozważ, że chcesz wydrukować coś przed paskiem bocznym w swoim szablonie.

  1. Do pliku szablonu dodasz hak akcjiindex.php za pośrednictwem <?php add_action('bp_sidebar_left'); ?>.
  2. Teraz w swoim functions.phppliku możesz dodać funkcję zwrotną do tego haka, aby wydrukować coś, co chcesz.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }

Aamer Shahzad
źródło
-1

Musisz użyć jak poniżej:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect
użytkownik112289
źródło
Działa dla mnie
user112289