Obține o listă cu toate acțiunile înregistrate

2 iul. 2013, 17:47:20
Vizualizări: 56.2K
Voturi: 44

Încerc să debughez un plugin pe care nu l-am dezvoltat eu și vreau să listez toate acțiunile înregistrate. Am citit acest thread de pe SO:

Dar este specific pentru un singur hook și este despre filtre, nu despre acțiuni.

Există vreo variabilă precum $wp_filter sau ceva similar?

4
Comentarii

Folosește acest plugin pentru a afișa vizual pe o pagină https://wordpress.org/plugins/show-hooks/

Rafiq Rafiq
23 iun. 2020 16:46:56

și tu ești dezvoltatorul acelui plugin, corect?

alexwc_ alexwc_
24 aug. 2020 05:57:40

Da, am creat acest plugin pentru mine și apoi l-am hostat pe WordPress.

Rafiq Rafiq
25 aug. 2020 18:59:24

@Rafiq ar trebui să elimini link-ul tău show-hooks deoarece nu mai este valid.

Prof. Moriarty Prof. Moriarty
1 dec. 2023 20:37:37
Toate răspunsurile la întrebare 2
4
60

Filtrele și acțiunile sunt ambele atribuite cârligelor (hooks). Funcțiile atribuite cârligelor sunt stocate în variabila globală $wp_filter. Deci tot ce trebuie să faci este să folosești print_r pentru a le afișa.

print_r($GLOBALS['wp_filter']);

PS. Funcția add_action face un apel către add_filter. Iar aceasta din urmă folosește $wp_filter[$tag][$priority][$idx].




NOTĂ: poți adăuga direct acest cod în functions.php, și vei vedea un debug pe site-ul tău:

add_action('wp', function(){ echo '<pre>';print_r($GLOBALS['wp_filter']); echo '</pre>';exit; } );
2 iul. 2013 17:52:11
Comentarii

super, dar unde le pot depana? am încercat să adaug if(WP_DEBUG == true){ global $wp_filter; print_r($wp_filter); } în index.php și am primit NULL

Jacer Omri Jacer Omri
2 iul. 2013 17:57:07

greșeala mea, nu trebuia să scriu global $wp_filter;

Jacer Omri Jacer Omri
2 iul. 2013 18:03:39

OK, deci ai rezolvat problema?

Krzysiek Dróżdż Krzysiek Dróżdż
2 iul. 2013 18:12:55

Nu utilizați hook-ul wp dacă întâmpinați probleme de memorie. Plasați codul fără hook în fișierul functions.php.

jMike jMike
11 sept. 2022 12:21:33
1

Întrebare originală legată de hook-uri de tip acțiune.

...Dar este specifică unui singur hook și este despre filtre, nu acțiuni.

Există vreo variabilă precum $wp_filter sau ceva similar?

Deci, răspunsul este Da, există. Este variabila globală $wp_actions.

Consultați wp-includes/plugin.php în jurul liniei 31 (pentru WP 6.4.2) unde este declarată prima dată variabila $wp_actions ca global ...fără nicio descriere.

Derulați în jos până la funcția function do_action(). Citiți doc-block-ul lor.

* @global int[]     $wp_actions        Stochează numărul de ori fiecare acțiune a fost declanșată.

Deci, această variabilă este folosită pentru a stoca hook-urile de tip acțiune care au fost declanșate.

Pentru oricine care ajunge pe această pagină de la un motor de căutare și caută filtre declanșate, da, acestea se găsesc în $wp_filters NU $wp_filter.

Pentru a vedea ce acțiuni au fost declanșate. În codul tău, folosește hook-ul shutdown (sau orice acțiune care nu este prea devreme) și apoi...

global $wp_actions;
echo '<pre>'.htmlspecialchars(print_r($wp_actions, true)).'</pre>';
24 dec. 2023 15:50:52
Comentarii

Mulțumesc! Răspunsul acceptat a cauzat erori de memorie, chiar și cu 32GB. Și array-ul era plin de informații irelevante.

Zade Zade
22 sept. 2024 23:05:48