似乎有一个dispatch
在…上shutdown
, 看来wp_ajax_my_action
在请求的最后一个执行,但我不能确定,因为它没有显示在正常操作查看器中。
我最新能钓到什么?
我不知道为什么这会造成混乱,但我的意思是,如果你这样做的话wp_ajax_%
当你在页脚的时候,这是行不通的。如果你接近init
, 加入functions.php
, 它起作用了,钩住发生了so it seems that before WP does the AJAX call, which calls wp_die()
anyways, it sets up the hooks and there is a point after which you can no longer hook into these endpoints 我的问题是:什么时候将函数挂接到wp_ajax_
端点?
示例:
add_action( \'wp_ajax_my_endpoint\', \'my_function\' ) in functions.php
作品
add_action( \'wp_ajax_my_endpoint\', \'my_function\' ) in footer.php
不起作用。
为什么呢
SO网友:Jacob Peattie
对于挂钩的工作方式和AJAX的工作方式,这里似乎存在很大的误解。
无法在页脚中连接到AJAX的原因。php是因为页脚。AJAX请求期间不加载php。没有模板。
当你跑步时add_action()
您正在计划在当前请求期间激发某个操作时激发某个给定函数。加载页面时,WordPress会加载函数。php并运行所有add_action()
立即启动函数,以便在稍后发生的任何事件触发操作时,所有函数都排队等待启动。它对每一次单页加载都执行此操作。在任何阶段都不会“存储”任何挂钩,以便它们可以在单独的请求下运行。
这就引出了AJAX。由jQuery或其他任何程序发出的AJAX请求是一个单独的请求。这相当于在一个新选项卡中打开一个链接,它只发生在后台。这意味着在原始页面加载期间发生的任何事情都不会计划在AJAX请求期间运行。在发出AJAX请求时,调度要运行的内容的唯一方法是在函数中对其进行调度。php或插件,以便在WordPress再次加载该请求时安排操作。
由于钩住的函数不会存储在请求之间,因此任何挂接在模板中的函数只能在其挂接到的操作发生在以后的模板中时运行。但是,对于AJAX请求,不会加载任何模板,因为这是一个后台请求,而不是对特定页面的请求。